From cae98899ea51b20c0baf57ce0cf056617c6b6a2a Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta Date: Fri, 6 Mar 2015 06:25:40 -0500 Subject: [PATCH] Bug 1137875 - Have the SharedFrameMetricsData hold a copy of the layers id. r=nical --- gfx/layers/apz/src/AsyncPanZoomController.cpp | 2 +- gfx/layers/ipc/CompositorChild.cpp | 18 ++++++++++++++---- gfx/layers/ipc/CompositorChild.h | 4 ++++ gfx/layers/ipc/PCompositor.ipdl | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/gfx/layers/apz/src/AsyncPanZoomController.cpp b/gfx/layers/apz/src/AsyncPanZoomController.cpp index 24608383498..a835d5bef25 100644 --- a/gfx/layers/apz/src/AsyncPanZoomController.cpp +++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp @@ -3098,7 +3098,7 @@ void AsyncPanZoomController::ShareCompositorFrameMetrics() { // Send the shared memory handle and cross process handle to the content // process by an asynchronous ipc call. Include the APZC unique ID // so the content process know which APZC sent this shared FrameMetrics. - if (!compositor->SendSharedCompositorFrameMetrics(mem, handle, mAPZCId)) { + if (!compositor->SendSharedCompositorFrameMetrics(mem, handle, mLayersId, mAPZCId)) { APZC_LOG("%p failed to share FrameMetrics with content process.", this); } } diff --git a/gfx/layers/ipc/CompositorChild.cpp b/gfx/layers/ipc/CompositorChild.cpp index 84950da97e8..a6ce8061a93 100644 --- a/gfx/layers/ipc/CompositorChild.cpp +++ b/gfx/layers/ipc/CompositorChild.cpp @@ -339,9 +339,11 @@ bool CompositorChild::RecvSharedCompositorFrameMetrics( const mozilla::ipc::SharedMemoryBasic::Handle& metrics, const CrossProcessMutexHandle& handle, + const uint64_t& aLayersId, const uint32_t& aAPZCId) { - SharedFrameMetricsData* data = new SharedFrameMetricsData(metrics, handle, aAPZCId); + SharedFrameMetricsData* data = new SharedFrameMetricsData( + metrics, handle, aLayersId, aAPZCId); mFrameMetricsTable.Put(data->GetViewID(), data); return true; } @@ -364,9 +366,11 @@ CompositorChild::RecvReleaseSharedCompositorFrameMetrics( CompositorChild::SharedFrameMetricsData::SharedFrameMetricsData( const ipc::SharedMemoryBasic::Handle& metrics, const CrossProcessMutexHandle& handle, - const uint32_t& aAPZCId) : - mMutex(nullptr), - mAPZCId(aAPZCId) + const uint64_t& aLayersId, + const uint32_t& aAPZCId) + : mMutex(nullptr) + , mLayersId(aLayersId) + , mAPZCId(aAPZCId) { mBuffer = new ipc::SharedMemoryBasic(metrics); mBuffer->Map(sizeof(FrameMetrics)); @@ -403,6 +407,12 @@ CompositorChild::SharedFrameMetricsData::GetViewID() return frame->GetScrollId(); } +uint64_t +CompositorChild::SharedFrameMetricsData::GetLayersId() const +{ + return mLayersId; +} + uint32_t CompositorChild::SharedFrameMetricsData::GetAPZCId() { diff --git a/gfx/layers/ipc/CompositorChild.h b/gfx/layers/ipc/CompositorChild.h index 171d3cc00bf..a87929c9c05 100644 --- a/gfx/layers/ipc/CompositorChild.h +++ b/gfx/layers/ipc/CompositorChild.h @@ -128,6 +128,7 @@ private: virtual bool RecvSharedCompositorFrameMetrics(const mozilla::ipc::SharedMemoryBasic::Handle& metrics, const CrossProcessMutexHandle& handle, + const uint64_t& aLayersId, const uint32_t& aAPZCId) MOZ_OVERRIDE; virtual bool RecvReleaseSharedCompositorFrameMetrics(const ViewID& aId, @@ -142,12 +143,14 @@ private: SharedFrameMetricsData( const mozilla::ipc::SharedMemoryBasic::Handle& metrics, const CrossProcessMutexHandle& handle, + const uint64_t& aLayersId, const uint32_t& aAPZCId); ~SharedFrameMetricsData(); void CopyFrameMetrics(FrameMetrics* aFrame); FrameMetrics::ViewID GetViewID(); + uint64_t GetLayersId() const; uint32_t GetAPZCId(); private: @@ -155,6 +158,7 @@ private: // the shared FrameMetrics nsRefPtr mBuffer; CrossProcessMutex* mMutex; + uint64_t mLayersId; // Unique ID of the APZC that is sharing the FrameMetrics uint32_t mAPZCId; }; diff --git a/gfx/layers/ipc/PCompositor.ipdl b/gfx/layers/ipc/PCompositor.ipdl index d5753e8d389..39a9d64c38f 100644 --- a/gfx/layers/ipc/PCompositor.ipdl +++ b/gfx/layers/ipc/PCompositor.ipdl @@ -133,7 +133,7 @@ parent: child: // Send back Compositor Frame Metrics from APZCs so tiled layers can // update progressively. - async SharedCompositorFrameMetrics(Handle metrics, CrossProcessMutexHandle mutex, uint32_t aAPZCId); + async SharedCompositorFrameMetrics(Handle metrics, CrossProcessMutexHandle mutex, uint64_t aLayersId, uint32_t aAPZCId); async ReleaseSharedCompositorFrameMetrics(ViewID aId, uint32_t aAPZCId); };