OLD | NEW |
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" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 }; | 45 }; |
46 | 46 |
47 base::Thread* g_compositor_thread = NULL; | 47 base::Thread* g_compositor_thread = NULL; |
48 | 48 |
49 bool g_test_compositor_enabled = false; | 49 bool g_test_compositor_enabled = false; |
50 | 50 |
51 ui::ContextFactory* g_context_factory = NULL; | 51 ui::ContextFactory* g_context_factory = NULL; |
52 | 52 |
53 const int kCompositorLockTimeoutMs = 67; | 53 const int kCompositorLockTimeoutMs = 67; |
54 | 54 |
55 // Adapts a pure WebGraphicsContext3D into a cc::OutputSurface. | |
56 class WebGraphicsContextToOutputSurfaceAdapter | |
57 : public cc::OutputSurface { | |
58 public: | |
59 explicit WebGraphicsContextToOutputSurfaceAdapter( | |
60 WebKit::WebGraphicsContext3D* context) | |
61 : context3D_(context), | |
62 client_(NULL) { | |
63 } | |
64 | |
65 virtual bool BindToClient( | |
66 cc::OutputSurfaceClient* client) OVERRIDE { | |
67 DCHECK(client); | |
68 if (!context3D_->makeContextCurrent()) | |
69 return false; | |
70 client_ = client; | |
71 return true; | |
72 } | |
73 | |
74 virtual const struct Capabilities& Capabilities() const OVERRIDE { | |
75 return capabilities_; | |
76 } | |
77 | |
78 virtual WebKit::WebGraphicsContext3D* Context3D() const OVERRIDE { | |
79 return context3D_.get(); | |
80 } | |
81 | |
82 virtual cc::SoftwareOutputDevice* SoftwareDevice() const OVERRIDE { | |
83 return NULL; | |
84 } | |
85 | |
86 virtual void SendFrameToParentCompositor(cc::CompositorFrame*) OVERRIDE { | |
87 } | |
88 | |
89 private: | |
90 scoped_ptr<WebKit::WebGraphicsContext3D> context3D_; | |
91 struct Capabilities capabilities_; | |
92 cc::OutputSurfaceClient* client_; | |
93 }; | |
94 | |
95 class PendingSwap { | 55 class PendingSwap { |
96 public: | 56 public: |
97 PendingSwap(SwapType type, ui::PostedSwapQueue* posted_swaps); | 57 PendingSwap(SwapType type, ui::PostedSwapQueue* posted_swaps); |
98 ~PendingSwap(); | 58 ~PendingSwap(); |
99 | 59 |
100 SwapType type() const { return type_; } | 60 SwapType type() const { return type_; } |
101 bool posted() const { return posted_; } | 61 bool posted() const { return posted_; } |
102 | 62 |
103 private: | 63 private: |
104 friend class ui::PostedSwapQueue; | 64 friend class ui::PostedSwapQueue; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 if (!gfx::GLSurface::InitializeOneOff() || | 107 if (!gfx::GLSurface::InitializeOneOff() || |
148 gfx::GetGLImplementation() == gfx::kGLImplementationNone) { | 108 gfx::GetGLImplementation() == gfx::kGLImplementationNone) { |
149 LOG(ERROR) << "Could not load the GL bindings"; | 109 LOG(ERROR) << "Could not load the GL bindings"; |
150 return false; | 110 return false; |
151 } | 111 } |
152 return true; | 112 return true; |
153 } | 113 } |
154 | 114 |
155 cc::OutputSurface* DefaultContextFactory::CreateOutputSurface( | 115 cc::OutputSurface* DefaultContextFactory::CreateOutputSurface( |
156 Compositor* compositor) { | 116 Compositor* compositor) { |
157 return new WebGraphicsContextToOutputSurfaceAdapter( | 117 return new cc::OutputSurface( |
158 CreateContextCommon(compositor, false)); | 118 make_scoped_ptr(CreateContextCommon(compositor, false))); |
159 } | 119 } |
160 | 120 |
161 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateOffscreenContext() { | 121 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateOffscreenContext() { |
162 return CreateContextCommon(NULL, true); | 122 return CreateContextCommon(NULL, true); |
163 } | 123 } |
164 | 124 |
165 void DefaultContextFactory::RemoveCompositor(Compositor* compositor) { | 125 void DefaultContextFactory::RemoveCompositor(Compositor* compositor) { |
166 } | 126 } |
167 | 127 |
168 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateContextCommon( | 128 WebKit::WebGraphicsContext3D* DefaultContextFactory::CreateContextCommon( |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 root_layer_->SendDamagedRects(); | 459 root_layer_->SendDamagedRects(); |
500 disable_schedule_composite_ = false; | 460 disable_schedule_composite_ = false; |
501 } | 461 } |
502 | 462 |
503 void Compositor::applyScrollAndScale(gfx::Vector2d scrollDelta, | 463 void Compositor::applyScrollAndScale(gfx::Vector2d scrollDelta, |
504 float pageScale) { | 464 float pageScale) { |
505 } | 465 } |
506 | 466 |
507 scoped_ptr<cc::OutputSurface> Compositor::createOutputSurface() { | 467 scoped_ptr<cc::OutputSurface> Compositor::createOutputSurface() { |
508 if (g_test_compositor_enabled) { | 468 if (g_test_compositor_enabled) { |
509 ui::TestWebGraphicsContext3D* test_context = | 469 scoped_ptr<ui::TestWebGraphicsContext3D> context3d( |
510 new ui::TestWebGraphicsContext3D(); | 470 new ui::TestWebGraphicsContext3D); |
511 test_context->Initialize(); | 471 context3d->Initialize(); |
512 return scoped_ptr<cc::OutputSurface>( | 472 return make_scoped_ptr(new cc::OutputSurface( |
513 new WebGraphicsContextToOutputSurfaceAdapter(test_context)); | 473 context3d.PassAs<WebKit::WebGraphicsContext3D>())); |
514 } else { | 474 } else { |
515 return scoped_ptr<cc::OutputSurface>( | 475 return make_scoped_ptr( |
516 ContextFactory::GetInstance()->CreateOutputSurface(this)); | 476 ContextFactory::GetInstance()->CreateOutputSurface(this)); |
517 } | 477 } |
518 } | 478 } |
519 | 479 |
520 void Compositor::didRecreateOutputSurface(bool success) { | 480 void Compositor::didRecreateOutputSurface(bool success) { |
521 } | 481 } |
522 | 482 |
523 scoped_ptr<cc::InputHandler> Compositor::createInputHandler() { | 483 scoped_ptr<cc::InputHandler> Compositor::createInputHandler() { |
524 return scoped_ptr<cc::InputHandler>(); | 484 return scoped_ptr<cc::InputHandler>(); |
525 } | 485 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 | 559 |
600 COMPOSITOR_EXPORT void DisableTestCompositor() { | 560 COMPOSITOR_EXPORT void DisableTestCompositor() { |
601 g_test_compositor_enabled = false; | 561 g_test_compositor_enabled = false; |
602 } | 562 } |
603 | 563 |
604 COMPOSITOR_EXPORT bool IsTestCompositorEnabled() { | 564 COMPOSITOR_EXPORT bool IsTestCompositorEnabled() { |
605 return g_test_compositor_enabled; | 565 return g_test_compositor_enabled; |
606 } | 566 } |
607 | 567 |
608 } // namespace ui | 568 } // namespace ui |
OLD | NEW |