diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-11 14:54:48 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-11 14:54:48 +0000 |
commit | 192093059d1ec1c6334e7195865201232e7db558 (patch) | |
tree | 5a9a407e36e7aa172f35968442a83b49fe8c580e /ui | |
parent | 3a761d29fc85af76d924dc6d28e5b96c3f903539 (diff) | |
download | chromium_src-192093059d1ec1c6334e7195865201232e7db558.zip chromium_src-192093059d1ec1c6334e7195865201232e7db558.tar.gz chromium_src-192093059d1ec1c6334e7195865201232e7db558.tar.bz2 |
Almost fixes the multithread compositor for accelerated content. This will be fully fixed once the browser compositor does not use the in_process_impl anymore.
WebKit patch: https://bugs.webkit.org/show_bug.cgi?id=75491
BUG=None
TEST=None
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=116782
Review URL: http://codereview.chromium.org/9014030
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117218 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gfx/compositor/compositor.cc | 18 | ||||
-rw-r--r-- | ui/gfx/compositor/compositor.h | 9 | ||||
-rw-r--r-- | ui/gfx/compositor/compositor_cc.cc | 8 | ||||
-rw-r--r-- | ui/gfx/compositor/compositor_cc.h | 2 |
4 files changed, 27 insertions, 10 deletions
diff --git a/ui/gfx/compositor/compositor.cc b/ui/gfx/compositor/compositor.cc index 97508f3..96595b5 100644 --- a/ui/gfx/compositor/compositor.cc +++ b/ui/gfx/compositor/compositor.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -51,7 +51,9 @@ void Compositor::Draw(bool force_clear) { NotifyStart(force_clear); DrawTree(); - NotifyEnd(); + if (!CompositesAsynchronously()) { + NotifyEnd(); + } } void Compositor::AddObserver(CompositorObserver* observer) { @@ -74,6 +76,10 @@ void Compositor::DrawTree() { root_layer_->DrawTree(); } +bool Compositor::CompositesAsynchronously() { + return false; +} + void Compositor::SwizzleRGBAToBGRAAndFlip(unsigned char* pixels, const gfx::Size& image_size) { // Swizzle from RGBA to BGRA @@ -97,10 +103,6 @@ void Compositor::SwizzleRGBAToBGRAAndFlip(unsigned char* pixels, } } -void Compositor::NotifyStart(bool clear) { - OnNotifyStart(clear); -} - void Compositor::NotifyEnd() { OnNotifyEnd(); FOR_EACH_OBSERVER(CompositorObserver, @@ -108,4 +110,8 @@ void Compositor::NotifyEnd() { OnCompositingEnded(this)); } +void Compositor::NotifyStart(bool clear) { + OnNotifyStart(clear); +} + } // namespace ui diff --git a/ui/gfx/compositor/compositor.h b/ui/gfx/compositor/compositor.h index 2b41553..5068946 100644 --- a/ui/gfx/compositor/compositor.h +++ b/ui/gfx/compositor/compositor.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -182,6 +182,7 @@ class COMPOSITOR_EXPORT Compositor : public base::RefCounted<Compositor> { virtual void OnWidgetSizeChanged() = 0; virtual void OnRootLayerChanged(); virtual void DrawTree(); + virtual bool CompositesAsynchronously(); CompositorDelegate* delegate() { return delegate_; } @@ -190,14 +191,14 @@ class COMPOSITOR_EXPORT Compositor : public base::RefCounted<Compositor> { static void SwizzleRGBAToBGRAAndFlip(unsigned char* pixels, const gfx::Size& image_size); + // Notifies the compositor that compositing is complete. + void NotifyEnd(); + private: // Notifies the compositor that compositing is about to start. See Draw() for // notes about |force_clear|. void NotifyStart(bool force_clear); - // Notifies the compositor that compositing is complete. - void NotifyEnd(); - CompositorDelegate* delegate_; gfx::Size size_; diff --git a/ui/gfx/compositor/compositor_cc.cc b/ui/gfx/compositor/compositor_cc.cc index 5e47127d..8957990 100644 --- a/ui/gfx/compositor/compositor_cc.cc +++ b/ui/gfx/compositor/compositor_cc.cc @@ -218,6 +218,10 @@ void CompositorCC::DrawTree() { host_.composite(); } +bool CompositorCC::CompositesAsynchronously() { + return g_compositor_thread != NULL; +} + bool CompositorCC::ReadPixels(SkBitmap* bitmap, const gfx::Rect& bounds) { if (bounds.right() > size().width() || bounds.bottom() > size().height()) return false; @@ -279,6 +283,10 @@ WebKit::WebGraphicsContext3D* CompositorCC::createContext3D() { return context; } +void CompositorCC::didCompleteSwapBuffers() { + NotifyEnd(); +} + void CompositorCC::didRebindGraphicsContext(bool success) { } diff --git a/ui/gfx/compositor/compositor_cc.h b/ui/gfx/compositor/compositor_cc.h index 9888e7c..267576f 100644 --- a/ui/gfx/compositor/compositor_cc.h +++ b/ui/gfx/compositor/compositor_cc.h @@ -98,6 +98,7 @@ class COMPOSITOR_EXPORT CompositorCC virtual void OnWidgetSizeChanged() OVERRIDE; virtual void OnRootLayerChanged() OVERRIDE; virtual void DrawTree() OVERRIDE; + virtual bool CompositesAsynchronously() OVERRIDE; virtual bool ReadPixels(SkBitmap* bitmap, const gfx::Rect& bounds) OVERRIDE; // WebLayerTreeViewClient implementation. @@ -111,6 +112,7 @@ class COMPOSITOR_EXPORT CompositorCC float scaleFactor); virtual void applyScrollDelta(const WebKit::WebSize&); virtual WebKit::WebGraphicsContext3D* createContext3D(); + virtual void didCompleteSwapBuffers(); virtual void didRebindGraphicsContext(bool success); virtual void scheduleComposite(); |