summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorpkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-11 14:54:48 +0000
committerpkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-11 14:54:48 +0000
commit192093059d1ec1c6334e7195865201232e7db558 (patch)
tree5a9a407e36e7aa172f35968442a83b49fe8c580e /ui
parent3a761d29fc85af76d924dc6d28e5b96c3f903539 (diff)
downloadchromium_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.cc18
-rw-r--r--ui/gfx/compositor/compositor.h9
-rw-r--r--ui/gfx/compositor/compositor_cc.cc8
-rw-r--r--ui/gfx/compositor/compositor_cc.h2
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();