Chromium Code Reviews| 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 |