summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-06-09 04:28:39 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-09 04:28:39 +0000
commitdd90d080837a6be723336421eb497105c547aa78 (patch)
tree9b78e385f56a8b07708a54716d78543d85352d1f
parent3447ecaca4a9f37be8acc4211ec2091afdbf11f2 (diff)
parent3e30d2f7c5d26f3a924c7a67ffe3d0ee9ac3c7c1 (diff)
downloadnative-dd90d080837a6be723336421eb497105c547aa78.tar.gz
Merge cherrypicks of [2379117, 2381642, 2381625, 2377657] into oc-release
Change-Id: I368f0a23d17d32f1e2d72c0ecbc0721513c82e4e
-rw-r--r--include/gui/DisplayEventReceiver.h4
-rw-r--r--include/gui/ISurfaceComposer.h8
-rw-r--r--libs/gui/DisplayEventReceiver.cpp4
-rw-r--r--libs/gui/ISurfaceComposer.cpp6
-rw-r--r--libs/gui/tests/Surface_test.cpp3
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp9
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h3
7 files changed, 27 insertions, 10 deletions
diff --git a/include/gui/DisplayEventReceiver.h b/include/gui/DisplayEventReceiver.h
index 9557b4f967..32ce59a765 100644
--- a/include/gui/DisplayEventReceiver.h
+++ b/include/gui/DisplayEventReceiver.h
@@ -25,6 +25,7 @@
#include <utils/Timers.h>
#include <binder/IInterface.h>
+#include <gui/ISurfaceComposer.h>
// ----------------------------------------------------------------------------
@@ -83,7 +84,8 @@ public:
* or requestNextVsync to receive them.
* Other events start being delivered immediately.
*/
- DisplayEventReceiver();
+ DisplayEventReceiver(
+ ISurfaceComposer::VsyncSource vsyncSource = ISurfaceComposer::eVsyncSourceApp);
/*
* ~DisplayEventReceiver severs the connection with SurfaceFlinger, new events
diff --git a/include/gui/ISurfaceComposer.h b/include/gui/ISurfaceComposer.h
index 1112973587..f80ba000b4 100644
--- a/include/gui/ISurfaceComposer.h
+++ b/include/gui/ISurfaceComposer.h
@@ -72,6 +72,11 @@ public:
eRotate270 = 3
};
+ enum VsyncSource {
+ eVsyncSourceApp = 0,
+ eVsyncSourceSurfaceFlinger = 1
+ };
+
/* create connection with surface flinger, requires
* ACCESS_SURFACE_FLINGER permission
*/
@@ -89,7 +94,8 @@ public:
const sp<IGraphicBufferProducer>& parent) = 0;
/* return an IDisplayEventConnection */
- virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0;
+ virtual sp<IDisplayEventConnection> createDisplayEventConnection(
+ VsyncSource vsyncSource = eVsyncSourceApp) = 0;
/* create a virtual display
* requires ACCESS_SURFACE_FLINGER permission.
diff --git a/libs/gui/DisplayEventReceiver.cpp b/libs/gui/DisplayEventReceiver.cpp
index 1507d51fca..1757ec1cd3 100644
--- a/libs/gui/DisplayEventReceiver.cpp
+++ b/libs/gui/DisplayEventReceiver.cpp
@@ -32,10 +32,10 @@ namespace android {
// ---------------------------------------------------------------------------
-DisplayEventReceiver::DisplayEventReceiver() {
+DisplayEventReceiver::DisplayEventReceiver(ISurfaceComposer::VsyncSource vsyncSource) {
sp<ISurfaceComposer> sf(ComposerService::getComposerService());
if (sf != NULL) {
- mEventConnection = sf->createDisplayEventConnection();
+ mEventConnection = sf->createDisplayEventConnection(vsyncSource);
if (mEventConnection != NULL) {
mDataChannel = std::make_unique<gui::BitTube>();
mEventConnection->stealReceiveChannel(mDataChannel.get());
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index 2516fb8a2d..0a0d112af6 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -201,7 +201,7 @@ public:
return NO_ERROR;
}
- virtual sp<IDisplayEventConnection> createDisplayEventConnection()
+ virtual sp<IDisplayEventConnection> createDisplayEventConnection(VsyncSource vsyncSource)
{
Parcel data, reply;
sp<IDisplayEventConnection> result;
@@ -210,6 +210,7 @@ public:
if (err != NO_ERROR) {
return result;
}
+ data.writeInt32(static_cast<int32_t>(vsyncSource));
err = remote()->transact(
BnSurfaceComposer::CREATE_DISPLAY_EVENT_CONNECTION,
data, &reply);
@@ -586,7 +587,8 @@ status_t BnSurfaceComposer::onTransact(
}
case CREATE_DISPLAY_EVENT_CONNECTION: {
CHECK_INTERFACE(ISurfaceComposer, data, reply);
- sp<IDisplayEventConnection> connection(createDisplayEventConnection());
+ sp<IDisplayEventConnection> connection(createDisplayEventConnection(
+ static_cast<ISurfaceComposer::VsyncSource>(data.readInt32())));
reply->writeStrongBinder(IInterface::asBinder(connection));
return NO_ERROR;
}
diff --git a/libs/gui/tests/Surface_test.cpp b/libs/gui/tests/Surface_test.cpp
index 81820def1c..e18af17bde 100644
--- a/libs/gui/tests/Surface_test.cpp
+++ b/libs/gui/tests/Surface_test.cpp
@@ -465,7 +465,8 @@ public:
const sp<IGraphicBufferProducer>& /* parent */) override {
return nullptr;
}
- sp<IDisplayEventConnection> createDisplayEventConnection() override {
+ sp<IDisplayEventConnection> createDisplayEventConnection(ISurfaceComposer::VsyncSource)
+ override {
return nullptr;
}
sp<IBinder> createDisplay(const String8& /*displayName*/,
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 801e8ddf4d..a49e8f4aa8 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1024,8 +1024,13 @@ status_t SurfaceFlinger::injectVSync(nsecs_t when) {
// ----------------------------------------------------------------------------
-sp<IDisplayEventConnection> SurfaceFlinger::createDisplayEventConnection() {
- return mEventThread->createEventConnection();
+sp<IDisplayEventConnection> SurfaceFlinger::createDisplayEventConnection(
+ ISurfaceComposer::VsyncSource vsyncSource) {
+ if (vsyncSource == eVsyncSourceSurfaceFlinger) {
+ return mSFEventThread->createEventConnection();
+ } else {
+ return mEventThread->createEventConnection();
+ }
}
// ----------------------------------------------------------------------------
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 1bc689dc79..c89e26f798 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -277,7 +277,8 @@ private:
const sp<IGraphicBufferProducer>& bufferProducer) const;
virtual status_t getSupportedFrameTimestamps(
std::vector<FrameEvent>* outSupported) const;
- virtual sp<IDisplayEventConnection> createDisplayEventConnection();
+ virtual sp<IDisplayEventConnection> createDisplayEventConnection(
+ ISurfaceComposer::VsyncSource vsyncSource = eVsyncSourceApp);
virtual status_t captureScreen(const sp<IBinder>& display,
const sp<IGraphicBufferProducer>& producer,
Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,