From d0f4bd1f302782137367a5285621a4ade6a6610d Mon Sep 17 00:00:00 2001 From: "skaslev@chromium.org" Date: Fri, 29 Mar 2013 05:06:48 +0000 Subject: [PATCH] Pass a sequence number along with the DIB handle when compositing in software. BUG=124671, 161008 Review URL: https://chromiumcodereview.appspot.com/13248003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191301 0039d316-1c4b-4281-b951-d872f2087c98 --- cc/output/compositor_frame_ack.cc | 4 +--- cc/output/compositor_frame_ack.h | 2 +- cc/output/software_frame_data.cc | 4 +--- cc/output/software_frame_data.h | 2 +- cc/output/software_output_device.cc | 5 +++-- cc/output/software_output_device.h | 2 +- cc/output/software_renderer.cc | 2 +- content/common/cc_messages.cc | 6 +++--- content/common/cc_messages.h | 2 +- ui/surface/transport_dib.h | 4 ++++ 10 files changed, 17 insertions(+), 16 deletions(-) diff --git a/cc/output/compositor_frame_ack.cc b/cc/output/compositor_frame_ack.cc index 781c67dd3924d2..a411b42f5de572 100644 --- a/cc/output/compositor_frame_ack.cc +++ b/cc/output/compositor_frame_ack.cc @@ -6,9 +6,7 @@ namespace cc { -CompositorFrameAck::CompositorFrameAck() - : last_content_dib(TransportDIB::DefaultHandleValue()) { -} +CompositorFrameAck::CompositorFrameAck() {} CompositorFrameAck::~CompositorFrameAck() {} diff --git a/cc/output/compositor_frame_ack.h b/cc/output/compositor_frame_ack.h index 5a63e0d0d09072..5b4bb50d7be18f 100644 --- a/cc/output/compositor_frame_ack.h +++ b/cc/output/compositor_frame_ack.h @@ -20,7 +20,7 @@ class CC_EXPORT CompositorFrameAck { TransferableResourceArray resources; scoped_ptr gl_frame_data; - TransportDIB::Handle last_content_dib; + TransportDIB::Id last_dib_id; private: DISALLOW_COPY_AND_ASSIGN(CompositorFrameAck); diff --git a/cc/output/software_frame_data.cc b/cc/output/software_frame_data.cc index 11feaa640999a9..20da28e9412897 100644 --- a/cc/output/software_frame_data.cc +++ b/cc/output/software_frame_data.cc @@ -6,9 +6,7 @@ namespace cc { -SoftwareFrameData::SoftwareFrameData() - : content_dib(TransportDIB::DefaultHandleValue()) { -} +SoftwareFrameData::SoftwareFrameData() {} SoftwareFrameData::~SoftwareFrameData() {} diff --git a/cc/output/software_frame_data.h b/cc/output/software_frame_data.h index aef9635cd6b05a..c1e3dd758f623a 100644 --- a/cc/output/software_frame_data.h +++ b/cc/output/software_frame_data.h @@ -19,7 +19,7 @@ class CC_EXPORT SoftwareFrameData { gfx::Size size; gfx::Rect damage_rect; - TransportDIB::Handle content_dib; + TransportDIB::Id dib_id; }; } // namespace cc diff --git a/cc/output/software_output_device.cc b/cc/output/software_output_device.cc index e63322a08f5f33..956ee6c5495510 100644 --- a/cc/output/software_output_device.cc +++ b/cc/output/software_output_device.cc @@ -34,8 +34,9 @@ SkCanvas* SoftwareOutputDevice::BeginPaint(gfx::Rect damage_rect) { void SoftwareOutputDevice::EndPaint(SoftwareFrameData* frame_data) { DCHECK(device_); if (frame_data) { + frame_data->size = viewport_size_; frame_data->damage_rect = damage_rect_; - frame_data->content_dib = TransportDIB::DefaultHandleValue(); + frame_data->dib_id = TransportDIB::Id(); } } @@ -54,7 +55,7 @@ void SoftwareOutputDevice::Scroll( NOTIMPLEMENTED(); } -void SoftwareOutputDevice::ReclaimDIB(TransportDIB::Handle handle) { +void SoftwareOutputDevice::ReclaimDIB(const TransportDIB::Id& id) { NOTIMPLEMENTED(); } diff --git a/cc/output/software_output_device.h b/cc/output/software_output_device.h index f9566f8eafa414..9899629ee9662d 100644 --- a/cc/output/software_output_device.h +++ b/cc/output/software_output_device.h @@ -39,7 +39,7 @@ class CC_EXPORT SoftwareOutputDevice { gfx::Rect clip_rect); // TODO(skaslev) Remove this after UberCompositor lands. - virtual void ReclaimDIB(TransportDIB::Handle handle); + virtual void ReclaimDIB(const TransportDIB::Id& id); protected: gfx::Size viewport_size_; diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc index 33dfacfab4f3bb..d9898005e25f3d 100644 --- a/cc/output/software_renderer.cc +++ b/cc/output/software_renderer.cc @@ -124,7 +124,7 @@ void SoftwareRenderer::ReceiveCompositorFrameAck( const CompositorFrameAck& ack) { if (capabilities_.using_swap_complete_callback) client_->OnSwapBuffersComplete(); - output_device_->ReclaimDIB(ack.last_content_dib); + output_device_->ReclaimDIB(ack.last_dib_id); } bool SoftwareRenderer::FlippedFramebuffer() const { diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc index fbd9fe0a5b71c4..f8e0d7495b73b4 100644 --- a/content/common/cc_messages.cc +++ b/content/common/cc_messages.cc @@ -627,7 +627,7 @@ void ParamTraits::Log(const param_type& p, void ParamTraits::Write(Message* m, const param_type& p) { WriteParam(m, p.resources); - WriteParam(m, p.last_content_dib); + WriteParam(m, p.last_dib_id); if (p.gl_frame_data) { WriteParam(m, static_cast(GL_FRAME)); WriteParam(m, *p.gl_frame_data); @@ -642,7 +642,7 @@ bool ParamTraits::Read(const Message* m, if (!ReadParam(m, iter, &p->resources)) return false; - if (!ReadParam(m, iter, &p->last_content_dib)) + if (!ReadParam(m, iter, &p->last_dib_id)) return false; int compositor_frame_type; @@ -668,7 +668,7 @@ void ParamTraits::Log(const param_type& p, l->append("CompositorFrameAck("); LogParam(p.resources, l); l->append(", "); - LogParam(p.last_content_dib, l); + LogParam(p.last_dib_id, l); l->append(", "); if (p.gl_frame_data) LogParam(*p.gl_frame_data, l); diff --git a/content/common/cc_messages.h b/content/common/cc_messages.h index 33a5fcb7ba028e..3cc7b9ee385b58 100644 --- a/content/common/cc_messages.h +++ b/content/common/cc_messages.h @@ -239,5 +239,5 @@ IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(cc::SoftwareFrameData) IPC_STRUCT_TRAITS_MEMBER(size) IPC_STRUCT_TRAITS_MEMBER(damage_rect) - IPC_STRUCT_TRAITS_MEMBER(content_dib) + IPC_STRUCT_TRAITS_MEMBER(dib_id) IPC_STRUCT_TRAITS_END() diff --git a/ui/surface/transport_dib.h b/ui/surface/transport_dib.h index 233cd2e2f95b18..6397c97420a674 100644 --- a/ui/surface/transport_dib.h +++ b/ui/surface/transport_dib.h @@ -54,6 +54,10 @@ class SURFACE_EXPORT TransportDIB { sequence_num(seq_num) { } + bool operator==(const HandleAndSequenceNum& other) const { + return other.handle == handle && other.sequence_num == sequence_num; + } + bool operator<(const HandleAndSequenceNum& other) const { // Use the lexicographic order on the tuple . if (other.handle != handle)