OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "blimp/client/core/render_widget/blimp_render_widget.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "blimp/client/core/compositor/blob_image_serialization_processor.h" | |
9 #include "blimp/client/core/compositor/compositor_deps_provider.h" | |
10 #include "blimp/client/core/render_widget/blimp_render_widget_delegate.h" | |
11 #include "cc/proto/compositor_message.pb.h" | |
12 | |
13 namespace blimp { | |
14 namespace client { | |
15 | |
16 BlimpRenderWidget::BlimpRenderWidget( | |
17 int32_t render_widget_id, | |
18 CompositorDepsProvider* compositor_deps_provider, | |
19 BlimpRenderWidgetDelegate* delegate) | |
20 : render_widget_id_(render_widget_id), | |
21 compositor_deps_provider_(compositor_deps_provider), | |
22 delegate_(delegate) { | |
23 DCHECK(delegate_); | |
24 | |
25 compositor_ = base::MakeUnique<BlimpCompositor>( | |
26 compositor_deps_provider->GetTaskGraphRunner(), | |
27 compositor_deps_provider_->GetGpuMemoryBufferManager(), | |
28 BlobImageSerializationProcessor::current(), | |
29 compositor_deps_provider_->GetLayerTreeSettings(), | |
30 compositor_deps_provider_->GetCompositorTaskRunner(), this); | |
31 | |
32 if (compositor_deps_provider_->use_direct_rendering()) | |
nyquist
2016/08/12 07:34:28
curlies throughout this file
Khushal
2016/08/13 00:03:22
Done.
| |
33 direct_rendering_deps_ = base::MakeUnique<DirectRenderingDeps>(this); | |
34 } | |
35 | |
36 BlimpRenderWidget::~BlimpRenderWidget() {} | |
37 | |
38 BlimpRenderWidget::DirectRenderingDeps::DirectRenderingDeps( | |
39 BlimpRenderWidget* render_widget) | |
40 : render_widget_(render_widget), | |
41 window_(gfx::kNullAcceleratedWidget), | |
42 visible_(false), | |
43 output_surface_request_pending_(false) { | |
44 DCHECK(render_widget_); | |
45 } | |
46 | |
47 BlimpRenderWidget::DirectRenderingDeps::~DirectRenderingDeps() {} | |
48 | |
49 void BlimpRenderWidget::DirectRenderingDeps::SetAcceleratedWidget( | |
50 gfx::AcceleratedWidget widget) { | |
51 if (widget == gfx::kNullAcceleratedWidget && | |
52 window_ == gfx::kNullAcceleratedWidget) | |
53 return; | |
nyquist
2016/08/12 07:34:28
braces
Khushal
2016/08/13 00:03:22
Done.
| |
54 | |
55 // If we did not have a widget, the compositor should not be visible. | |
56 DCHECK(window_ != gfx::kNullAcceleratedWidget || | |
57 !render_widget_->compositor_->IsVisible()); | |
58 | |
59 // Release any references to the old widget. | |
60 UpdateVisibility(false); | |
61 | |
62 window_ = widget; | |
63 UpdateVisibility(visible_ && window_ != gfx::kNullAcceleratedWidget); | |
64 } | |
65 | |
66 void BlimpRenderWidget::DirectRenderingDeps::SetVisible(bool visible) { | |
67 visible_ = visible; | |
68 UpdateVisibility(visible_ && window_ != gfx::kNullAcceleratedWidget); | |
69 } | |
70 | |
71 void BlimpRenderWidget::DirectRenderingDeps::RequestOutputSurface() { | |
72 DCHECK(!output_surface_request_pending_); | |
73 output_surface_request_pending_ = true; | |
74 HandlePendingOutputSurfaceRequest(); | |
75 } | |
76 | |
77 void BlimpRenderWidget::DirectRenderingDeps:: | |
78 HandlePendingOutputSurfaceRequest() { | |
79 if (!output_surface_request_pending_) | |
80 return; | |
81 | |
82 render_widget_->compositor_->SetOutputSurface( | |
83 render_widget_->compositor_deps_provider_ | |
84 ->CreateDirectRenderingOutputSurface(window_)); | |
85 | |
86 output_surface_request_pending_ = false; | |
87 } | |
88 | |
89 void BlimpRenderWidget::DirectRenderingDeps::UpdateVisibility(bool visible) { | |
90 if (visible) { | |
91 render_widget_->compositor_->SetVisible(true); | |
92 HandlePendingOutputSurfaceRequest(); | |
93 } else { | |
94 render_widget_->compositor_->SetVisible(false); | |
95 render_widget_->compositor_->ReleaseOutputSurface(); | |
96 } | |
97 } | |
98 | |
99 int32_t BlimpRenderWidget::GetId() const { | |
100 return render_widget_id_; | |
101 } | |
102 | |
103 void BlimpRenderWidget::SetAcceleratedWidget(gfx::AcceleratedWidget widget) { | |
104 DCHECK(direct_rendering_deps_); | |
105 direct_rendering_deps_->SetAcceleratedWidget(widget); | |
106 } | |
107 | |
108 void BlimpRenderWidget::SetVisible(bool visible) { | |
109 if (direct_rendering_deps_) | |
110 direct_rendering_deps_->SetVisible(visible); | |
111 else | |
112 compositor_->SetVisible(visible); | |
113 } | |
114 | |
115 // Move to the BlimpRenderWidgetView. | |
116 bool BlimpRenderWidget::OnTouchEvent(const ui::MotionEvent& motion_event) { | |
117 if (compositor_->input_manager()) | |
118 return compositor_->input_manager()->OnTouchEvent(motion_event); | |
119 return false; | |
120 } | |
121 | |
122 void BlimpRenderWidget::OnCompositorMessageReceived( | |
123 std::unique_ptr<cc::proto::CompositorMessage> message) { | |
124 compositor_->OnCompositorMessageReceived(std::move(message)); | |
125 } | |
126 | |
127 void BlimpRenderWidget::DidCompleteSwapBuffers() { | |
128 delegate_->CompositorDidCompleteSwapBuffers(); | |
129 } | |
130 | |
131 void BlimpRenderWidget::DidCommitAndDrawFrame() { | |
132 // BlimpStats::GetInstance()->Add(BlimpStats::EventType::COMMIT, 1); | |
133 } | |
134 | |
135 void BlimpRenderWidget::SendWebGestureEvent( | |
136 const blink::WebGestureEvent& gesture_event) { | |
137 delegate_->SendWebGestureEvent(this, gesture_event); | |
138 } | |
139 | |
140 void BlimpRenderWidget::SendCompositorMessage( | |
141 const cc::proto::CompositorMessage& message) { | |
142 delegate_->SendCompositorMessage(this, message); | |
143 } | |
144 | |
145 void BlimpRenderWidget::RequestOutputSurface() { | |
146 if (direct_rendering_deps_) | |
147 direct_rendering_deps_->RequestOutputSurface(); | |
148 | |
149 // TODO(khushalsagar): Add support for delegated rendering. | |
150 } | |
151 | |
152 } // namespace client | |
153 } // namespace blimp | |
OLD | NEW |