| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "android_webview/browser/render_thread_manager.h" | 5 #include "android_webview/browser/render_thread_manager.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "android_webview/browser/child_frame.h" | 9 #include "android_webview/browser/child_frame.h" |
| 10 #include "android_webview/browser/compositor_frame_producer.h" | 10 #include "android_webview/browser/compositor_frame_producer.h" |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 frame_future) { | 186 frame_future) { |
| 187 base::AutoLock lock(lock_); | 187 base::AutoLock lock(lock_); |
| 188 DCHECK(!child_frame_.get()); | 188 DCHECK(!child_frame_.get()); |
| 189 child_frame_ = std::move(frame); | 189 child_frame_ = std::move(frame); |
| 190 frame_future_ = std::move(frame_future); | 190 frame_future_ = std::move(frame_future); |
| 191 } | 191 } |
| 192 | 192 |
| 193 std::unique_ptr<ChildFrame> RenderThreadManager::GetSynchronousCompositorFrame( | 193 std::unique_ptr<ChildFrame> RenderThreadManager::GetSynchronousCompositorFrame( |
| 194 scoped_refptr<content::SynchronousCompositor::FrameFuture> frame_future, | 194 scoped_refptr<content::SynchronousCompositor::FrameFuture> frame_future, |
| 195 std::unique_ptr<ChildFrame> child_frame) { | 195 std::unique_ptr<ChildFrame> child_frame) { |
| 196 if (!frame_future) |
| 197 return nullptr; |
| 196 DCHECK(!child_frame->frame.get()); | 198 DCHECK(!child_frame->frame.get()); |
| 197 std::unique_ptr<content::SynchronousCompositor::Frame> frame = | 199 std::unique_ptr<content::SynchronousCompositor::Frame> frame = |
| 198 frame_future->getFrame(); | 200 frame_future->getFrame(); |
| 199 std::unique_ptr<cc::CompositorFrame> compositor_frame = | 201 std::unique_ptr<cc::CompositorFrame> compositor_frame = |
| 200 std::move(frame->frame); | 202 std::move(frame->frame); |
| 201 return base::MakeUnique<ChildFrame>( | 203 return base::MakeUnique<ChildFrame>( |
| 202 frame->compositor_frame_sink_id, std::move(compositor_frame), | 204 frame->compositor_frame_sink_id, std::move(compositor_frame), |
| 203 child_frame->compositor_id, | 205 child_frame->compositor_id, |
| 204 child_frame->viewport_rect_for_tile_priority_empty, | 206 child_frame->viewport_rect_for_tile_priority_empty, |
| 205 child_frame->transform_for_tile_priority, | 207 child_frame->transform_for_tile_priority, |
| 206 child_frame->offscreen_pre_raster, child_frame->is_layer); | 208 child_frame->offscreen_pre_raster, child_frame->is_layer); |
| 207 } | 209 } |
| 208 | 210 |
| 209 std::unique_ptr<ChildFrame> RenderThreadManager::PassFrameOnRT() { | 211 std::unique_ptr<ChildFrame> RenderThreadManager::PassFrameOnRT() { |
| 210 base::AutoLock lock(lock_); | 212 base::AutoLock lock(lock_); |
| 211 hardware_renderer_has_frame_ = | 213 hardware_renderer_has_frame_ = |
| 212 hardware_renderer_has_frame_ || child_frame_.get(); | 214 hardware_renderer_has_frame_ || child_frame_.get(); |
| 213 if (async_on_draw_hardware_ && child_frame_.get()) { | |
| 214 return GetSynchronousCompositorFrame(std::move(frame_future_), | |
| 215 std::move(child_frame_)); | |
| 216 } | |
| 217 return std::move(child_frame_); | 215 return std::move(child_frame_); |
| 218 } | 216 } |
| 219 | 217 |
| 218 scoped_refptr<content::SynchronousCompositor::FrameFuture> |
| 219 RenderThreadManager::PassFrameFutureOnRT() { |
| 220 base::AutoLock lock(lock_); |
| 221 return std::move(frame_future_); |
| 222 } |
| 223 |
| 220 std::unique_ptr<ChildFrame> RenderThreadManager::PassUncommittedFrameOnUI() { | 224 std::unique_ptr<ChildFrame> RenderThreadManager::PassUncommittedFrameOnUI() { |
| 221 base::AutoLock lock(lock_); | 225 base::AutoLock lock(lock_); |
| 222 if (async_on_draw_hardware_ && child_frame_.get()) { | 226 if (async_on_draw_hardware_ && child_frame_.get()) { |
| 223 return GetSynchronousCompositorFrame(std::move(frame_future_), | 227 return GetSynchronousCompositorFrame(std::move(frame_future_), |
| 224 std::move(child_frame_)); | 228 std::move(child_frame_)); |
| 225 } | 229 } |
| 226 return std::move(child_frame_); | 230 return std::move(child_frame_); |
| 227 } | 231 } |
| 228 | 232 |
| 229 void RenderThreadManager::PostExternalDrawConstraintsToChildCompositorOnRT( | 233 void RenderThreadManager::PostExternalDrawConstraintsToChildCompositorOnRT( |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 : render_thread_manager_(render_thread_manager) { | 427 : render_thread_manager_(render_thread_manager) { |
| 424 DCHECK(!render_thread_manager_->IsInsideHardwareRelease()); | 428 DCHECK(!render_thread_manager_->IsInsideHardwareRelease()); |
| 425 render_thread_manager_->SetInsideHardwareRelease(true); | 429 render_thread_manager_->SetInsideHardwareRelease(true); |
| 426 } | 430 } |
| 427 | 431 |
| 428 RenderThreadManager::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { | 432 RenderThreadManager::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { |
| 429 render_thread_manager_->SetInsideHardwareRelease(false); | 433 render_thread_manager_->SetInsideHardwareRelease(false); |
| 430 } | 434 } |
| 431 | 435 |
| 432 } // namespace android_webview | 436 } // namespace android_webview |
| OLD | NEW |