Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(487)

Side by Side Diff: ui/compositor/compositor.cc

Issue 11967033: [CLOSED] In-browser software compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix the lack SkCanvas::clear scissoring. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/base/x/x11_util.h ('k') | ui/compositor/compositor_switches.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/compositor/compositor.h" 5 #include "ui/compositor/compositor.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/threading/thread.h" 14 #include "base/threading/thread.h"
15 #include "base/threading/thread_restrictions.h" 15 #include "base/threading/thread_restrictions.h"
16 #include "cc/font_atlas.h" 16 #include "cc/font_atlas.h"
17 #include "cc/input_handler.h" 17 #include "cc/input_handler.h"
18 #include "cc/layer.h" 18 #include "cc/layer.h"
19 #include "cc/layer_tree_host.h" 19 #include "cc/layer_tree_host.h"
20 #include "cc/output_surface.h" 20 #include "cc/output_surface_impl.h"
21 #include "cc/thread_impl.h" 21 #include "cc/thread_impl.h"
22 #include "third_party/skia/include/core/SkBitmap.h" 22 #include "third_party/skia/include/core/SkBitmap.h"
23 #include "ui/compositor/compositor_observer.h" 23 #include "ui/compositor/compositor_observer.h"
24 #include "ui/compositor/compositor_switches.h" 24 #include "ui/compositor/compositor_switches.h"
25 #include "ui/compositor/dip_util.h" 25 #include "ui/compositor/dip_util.h"
26 #include "ui/compositor/layer.h" 26 #include "ui/compositor/layer.h"
27 #include "ui/compositor/test_web_graphics_context_3d.h" 27 #include "ui/compositor/test_web_graphics_context_3d.h"
28 #include "ui/gl/gl_context.h" 28 #include "ui/gl/gl_context.h"
29 #include "ui/gl/gl_implementation.h" 29 #include "ui/gl/gl_implementation.h"
30 #include "ui/gl/gl_surface.h" 30 #include "ui/gl/gl_surface.h"
(...skipping 15 matching lines...) Expand all
46 }; 46 };
47 47
48 base::Thread* g_compositor_thread = NULL; 48 base::Thread* g_compositor_thread = NULL;
49 49
50 bool test_compositor_enabled = false; 50 bool test_compositor_enabled = false;
51 51
52 ui::ContextFactory* g_context_factory = NULL; 52 ui::ContextFactory* g_context_factory = NULL;
53 53
54 const int kCompositorLockTimeoutMs = 67; 54 const int kCompositorLockTimeoutMs = 67;
55 55
56 // Adapts a pure WebGraphicsContext3D into a cc::OutputSurface.
57 class WebGraphicsContextToOutputSurfaceAdapter
58 : public cc::OutputSurface {
59 public:
60 explicit WebGraphicsContextToOutputSurfaceAdapter(
61 WebKit::WebGraphicsContext3D* context)
62 : context3D_(context),
63 client_(NULL) {
64 }
65
66 virtual bool BindToClient(
67 cc::OutputSurfaceClient* client) OVERRIDE {
68 DCHECK(client);
69 if (!context3D_->makeContextCurrent())
70 return false;
71 client_ = client;
72 return true;
73 }
74
75 virtual const struct Capabilities& Capabilities() const OVERRIDE {
76 return capabilities_;
77 }
78
79 virtual WebKit::WebGraphicsContext3D* Context3D() const OVERRIDE {
80 return context3D_.get();
81 }
82
83 virtual cc::SoftwareOutputDevice* SoftwareDevice() const OVERRIDE {
84 return NULL;
85 }
86
87 virtual void SendFrameToParentCompositor(cc::CompositorFrame*) OVERRIDE {
88 }
89
90 private:
91 scoped_ptr<WebKit::WebGraphicsContext3D> context3D_;
92 struct Capabilities capabilities_;
93 cc::OutputSurfaceClient* client_;
94 };
95
96 class PendingSwap { 56 class PendingSwap {
97 public: 57 public:
98 PendingSwap(SwapType type, ui::PostedSwapQueue* posted_swaps); 58 PendingSwap(SwapType type, ui::PostedSwapQueue* posted_swaps);
99 ~PendingSwap(); 59 ~PendingSwap();
100 60
101 SwapType type() const { return type_; } 61 SwapType type() const { return type_; }
102 bool posted() const { return posted_; } 62 bool posted() const { return posted_; }
103 63
104 private: 64 private:
105 friend class ui::PostedSwapQueue; 65 friend class ui::PostedSwapQueue;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if (!gfx::GLSurface::InitializeOneOff() || 108 if (!gfx::GLSurface::InitializeOneOff() ||
149 gfx::GetGLImplementation() == gfx::kGLImplementationNone) { 109 gfx::GetGLImplementation() == gfx::kGLImplementationNone) {
150 LOG(ERROR) << "Could not load the GL bindings"; 110 LOG(ERROR) << "Could not load the GL bindings";
151 return false; 111 return false;
152 } 112 }
153 return true; 113 return true;
154 } 114 }
155 115
156 cc::OutputSurface* DefaultContextFactory::CreateOutputSurface( 116 cc::OutputSurface* DefaultContextFactory::CreateOutputSurface(
157 Compositor* compositor) { 117 Compositor* compositor) {
158 return new WebGraphicsContextToOutputSurfaceAdapter( 118 return new cc::OutputSurfaceImpl(
159 CreateContextCommon(compositor, false)); 119 make_scoped_ptr(CreateContextCommon(compositor, false)));
160 } 120 }
161 121
162 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateOffscreenContext() { 122 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateOffscreenContext() {
163 return CreateContextCommon(NULL, true); 123 return CreateContextCommon(NULL, true);
164 } 124 }
165 125
166 void DefaultContextFactory::RemoveCompositor(Compositor* compositor) { 126 void DefaultContextFactory::RemoveCompositor(Compositor* compositor) {
167 } 127 }
168 128
169 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateContextCommon( 129 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateContextCommon(
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 cc::LayerTreeSettings settings; 271 cc::LayerTreeSettings settings;
312 settings.initialDebugState.showFPSCounter = 272 settings.initialDebugState.showFPSCounter =
313 command_line->HasSwitch(switches::kUIShowFPSCounter); 273 command_line->HasSwitch(switches::kUIShowFPSCounter);
314 settings.initialDebugState.showPlatformLayerTree = 274 settings.initialDebugState.showPlatformLayerTree =
315 command_line->HasSwitch(switches::kUIShowLayerTree); 275 command_line->HasSwitch(switches::kUIShowLayerTree);
316 settings.refreshRate = 276 settings.refreshRate =
317 test_compositor_enabled ? kTestRefreshRate : kDefaultRefreshRate; 277 test_compositor_enabled ? kTestRefreshRate : kDefaultRefreshRate;
318 settings.initialDebugState.showDebugBorders = 278 settings.initialDebugState.showDebugBorders =
319 command_line->HasSwitch(switches::kUIShowLayerBorders); 279 command_line->HasSwitch(switches::kUIShowLayerBorders);
320 settings.partialSwapEnabled = 280 settings.partialSwapEnabled =
321 command_line->HasSwitch(switches::kUIEnablePartialSwap); 281 command_line->HasSwitch(switches::kUIEnablePartialSwap) ||
282 command_line->HasSwitch(switches::kUIEnableSoftwareCompositing);
322 settings.perTilePaintingEnabled = 283 settings.perTilePaintingEnabled =
323 command_line->HasSwitch(switches::kUIEnablePerTilePainting); 284 command_line->HasSwitch(switches::kUIEnablePerTilePainting);
324 285
325 scoped_ptr<cc::Thread> thread; 286 scoped_ptr<cc::Thread> thread;
326 if (g_compositor_thread) { 287 if (g_compositor_thread) {
327 thread = cc::ThreadImpl::createForDifferentThread( 288 thread = cc::ThreadImpl::createForDifferentThread(
328 g_compositor_thread->message_loop_proxy()); 289 g_compositor_thread->message_loop_proxy());
329 } 290 }
330 291
331 host_ = cc::LayerTreeHost::create(this, settings, thread.Pass()); 292 host_ = cc::LayerTreeHost::create(this, settings, thread.Pass());
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 root_layer_->SendDamagedRects(); 461 root_layer_->SendDamagedRects();
501 disable_schedule_composite_ = false; 462 disable_schedule_composite_ = false;
502 } 463 }
503 464
504 void Compositor::applyScrollAndScale(gfx::Vector2d scrollDelta, 465 void Compositor::applyScrollAndScale(gfx::Vector2d scrollDelta,
505 float pageScale) { 466 float pageScale) {
506 } 467 }
507 468
508 scoped_ptr<cc::OutputSurface> Compositor::createOutputSurface() { 469 scoped_ptr<cc::OutputSurface> Compositor::createOutputSurface() {
509 if (test_compositor_enabled) { 470 if (test_compositor_enabled) {
510 ui::TestWebGraphicsContext3D* test_context = 471 scoped_ptr<ui::TestWebGraphicsContext3D> context3d(
511 new ui::TestWebGraphicsContext3D(); 472 new ui::TestWebGraphicsContext3D);
512 test_context->Initialize(); 473 context3d->Initialize();
513 return scoped_ptr<cc::OutputSurface>( 474 return scoped_ptr<cc::OutputSurface>(
514 new WebGraphicsContextToOutputSurfaceAdapter(test_context)); 475 new cc::OutputSurfaceImpl(
476 context3d.PassAs<WebKit::WebGraphicsContext3D>()));
515 } else { 477 } else {
516 return scoped_ptr<cc::OutputSurface>( 478 return scoped_ptr<cc::OutputSurface>(
517 ContextFactory::GetInstance()->CreateOutputSurface(this)); 479 ContextFactory::GetInstance()->CreateOutputSurface(this));
518 } 480 }
519 } 481 }
520 482
521 void Compositor::didRecreateOutputSurface(bool success) { 483 void Compositor::didRecreateOutputSurface(bool success) {
522 } 484 }
523 485
524 scoped_ptr<cc::InputHandler> Compositor::createInputHandler() { 486 scoped_ptr<cc::InputHandler> Compositor::createInputHandler() {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 566
605 COMPOSITOR_EXPORT void DisableTestCompositor() { 567 COMPOSITOR_EXPORT void DisableTestCompositor() {
606 test_compositor_enabled = false; 568 test_compositor_enabled = false;
607 } 569 }
608 570
609 COMPOSITOR_EXPORT bool IsTestCompositorEnabled() { 571 COMPOSITOR_EXPORT bool IsTestCompositorEnabled() {
610 return test_compositor_enabled; 572 return test_compositor_enabled;
611 } 573 }
612 574
613 } // namespace ui 575 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/x/x11_util.h ('k') | ui/compositor/compositor_switches.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698