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

Unified Diff: android_webview/browser/render_thread_manager.cc

Issue 2347563003: Added FrameFuture class (Closed)
Patch Set: Finished, working Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/render_thread_manager.cc
diff --git a/android_webview/browser/render_thread_manager.cc b/android_webview/browser/render_thread_manager.cc
index 71327783ead520ea52553d5abe4b32461dac017a..70228b4a9870938e4db6ff96a3d1f4c5546a0394 100644
--- a/android_webview/browser/render_thread_manager.cc
+++ b/android_webview/browser/render_thread_manager.cc
@@ -13,13 +13,17 @@
#include "android_webview/browser/hardware_renderer.h"
#include "android_webview/browser/render_thread_manager_client.h"
#include "android_webview/browser/scoped_app_gl_state_restore.h"
+#include "android_webview/common/aw_switches.h"
#include "android_webview/public/browser/draw_gl.h"
#include "base/bind.h"
+#include "base/command_line.h"
#include "base/lazy_instance.h"
#include "base/location.h"
+#include "base/memory/ptr_util.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/trace_event_argument.h"
+#include "cc/output/compositor_frame.h"
namespace android_webview {
@@ -97,6 +101,8 @@ RenderThreadManager::RenderThreadManager(
compositor_frame_producer_(nullptr),
renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()),
hardware_renderer_has_frame_(false),
+ async_on_draw_hardware_(base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kAsyncOnDrawHardware)),
inside_hardware_release_(false),
weak_factory_on_ui_thread_(this) {
DCHECK(ui_loop_->BelongsToCurrentThread());
@@ -180,10 +186,31 @@ void RenderThreadManager::SetFrameOnUI(std::unique_ptr<ChildFrame> frame) {
child_frame_ = std::move(frame);
}
+void RenderThreadManager::SetFrameFutureOnUI(
+ const scoped_refptr<content::SynchronousCompositor::FrameFuture>&
+ frame_future) {
+ frame_future_ = std::move(frame_future);
boliu 2016/09/22 23:05:32 AutoLock
ojars 2016/09/28 00:17:59 Done.
+}
+
std::unique_ptr<ChildFrame> RenderThreadManager::PassFrameOnRT() {
boliu 2016/09/22 23:05:32 you need to repeat all this code for PassUncommitt
ojars 2016/09/28 00:17:58 Done.
base::AutoLock lock(lock_);
hardware_renderer_has_frame_ =
hardware_renderer_has_frame_ || child_frame_.get();
+ if (async_on_draw_hardware_ && child_frame_.get() &&
+ !child_frame_->frame.get()) {
boliu 2016/09/22 23:05:31 this third part of this check should be a DCHECK i
ojars 2016/09/28 00:17:58 Done.
+ std::unique_ptr<content::SynchronousCompositor::Frame> frame =
+ frame_future_->getFrame();
+
+ std::unique_ptr<cc::CompositorFrame> compositor_frame =
+ std::move(frame->frame);
+
+ child_frame_ = base::MakeUnique<ChildFrame>(
+ frame->compositor_frame_sink_id, std::move(compositor_frame),
+ child_frame_->compositor_id,
+ child_frame_->viewport_rect_for_tile_priority_empty,
+ child_frame_->transform_for_tile_priority,
+ child_frame_->offscreen_pre_raster, child_frame_->is_layer);
+ }
return std::move(child_frame_);
}

Powered by Google App Engine
This is Rietveld 408576698