| Index: android_webview/browser/hardware_renderer.cc
|
| diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc
|
| index 391534203dfd68d4ba41527c3b4c8bc62fe09f48..8befffea009eba39186cf896c24cb6d70273ea75 100644
|
| --- a/android_webview/browser/hardware_renderer.cc
|
| +++ b/android_webview/browser/hardware_renderer.cc
|
| @@ -30,6 +30,9 @@ HardwareRenderer::HardwareRenderer(RenderThreadManager* state)
|
| surfaces_(SurfacesInstance::GetOrCreateInstance()),
|
| frame_sink_id_(surfaces_->AllocateFrameSinkId()),
|
| surface_id_allocator_(base::MakeUnique<cc::SurfaceIdAllocator>()),
|
| + surface_factory_(new cc::SurfaceFactory(frame_sink_id_,
|
| + surfaces_->GetSurfaceManager(),
|
| + this)),
|
| last_committed_compositor_frame_sink_id_(0u),
|
| last_submitted_compositor_frame_sink_id_(0u) {
|
| DCHECK(last_egl_context_);
|
| @@ -62,30 +65,14 @@ void HardwareRenderer::CommitFrame() {
|
| if (!child_frame.get())
|
| return;
|
| ReturnResourcesInChildFrame();
|
| - frame_future_ = render_thread_manager_->PassFrameFutureOnRT();
|
| child_frame_ = std::move(child_frame);
|
| }
|
|
|
| void HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info) {
|
| TRACE_EVENT0("android_webview", "HardwareRenderer::DrawGL");
|
|
|
| - if (frame_future_) {
|
| - TRACE_EVENT0("android_webview", "GetFrame");
|
| - DCHECK(child_frame_);
|
| - DCHECK(!child_frame_->frame);
|
| -
|
| - std::unique_ptr<content::SynchronousCompositor::Frame> frame =
|
| - frame_future_->GetFrame();
|
| - if (frame) {
|
| - child_frame_->compositor_frame_sink_id = frame->compositor_frame_sink_id;
|
| - child_frame_->frame = std::move(frame->frame);
|
| - } else {
|
| - child_frame_.reset();
|
| - }
|
| - frame_future_ = nullptr;
|
| - }
|
| -
|
| if (child_frame_) {
|
| + child_frame_->WaitOnFutureIfNeeded();
|
| last_committed_compositor_frame_sink_id_ =
|
| child_frame_->compositor_frame_sink_id;
|
| }
|
| @@ -111,12 +98,10 @@ void HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info) {
|
| DestroySurface();
|
|
|
| // This will return all the resources to the previous compositor.
|
| - surface_factory_.reset();
|
| + surface_factory_->Reset();
|
| compositor_id_ = child_frame_->compositor_id;
|
| last_submitted_compositor_frame_sink_id_ =
|
| child_frame_->compositor_frame_sink_id;
|
| - surface_factory_.reset(new cc::SurfaceFactory(
|
| - frame_sink_id_, surfaces_->GetSurfaceManager(), this));
|
| }
|
|
|
| std::unique_ptr<cc::CompositorFrame> child_compositor_frame =
|
| @@ -164,7 +149,6 @@ void HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info) {
|
|
|
| void HardwareRenderer::AllocateSurface() {
|
| DCHECK(child_id_.is_null());
|
| - DCHECK(surface_factory_);
|
| child_id_ = surface_id_allocator_->GenerateId();
|
| surface_factory_->Create(child_id_);
|
| surfaces_->AddChildId(cc::SurfaceId(frame_sink_id_, child_id_));
|
| @@ -172,7 +156,6 @@ void HardwareRenderer::AllocateSurface() {
|
|
|
| void HardwareRenderer::DestroySurface() {
|
| DCHECK(!child_id_.is_null());
|
| - DCHECK(surface_factory_);
|
|
|
| // Submit an empty frame to force any existing resources to be returned.
|
| surface_factory_->SubmitCompositorFrame(child_id_, cc::CompositorFrame(),
|
|
|