diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-06-09 04:28:39 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-06-09 04:28:39 +0000 |
commit | dd90d080837a6be723336421eb497105c547aa78 (patch) | |
tree | 9b78e385f56a8b07708a54716d78543d85352d1f | |
parent | 3447ecaca4a9f37be8acc4211ec2091afdbf11f2 (diff) | |
parent | 3e30d2f7c5d26f3a924c7a67ffe3d0ee9ac3c7c1 (diff) | |
download | native-dd90d080837a6be723336421eb497105c547aa78.tar.gz |
Merge cherrypicks of [2379117, 2381642, 2381625, 2377657] into oc-release
Change-Id: I368f0a23d17d32f1e2d72c0ecbc0721513c82e4e
-rw-r--r-- | include/gui/DisplayEventReceiver.h | 4 | ||||
-rw-r--r-- | include/gui/ISurfaceComposer.h | 8 | ||||
-rw-r--r-- | libs/gui/DisplayEventReceiver.cpp | 4 | ||||
-rw-r--r-- | libs/gui/ISurfaceComposer.cpp | 6 | ||||
-rw-r--r-- | libs/gui/tests/Surface_test.cpp | 3 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 9 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 3 |
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, |