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

Unified Diff: content/browser/android/in_process/synchronous_compositor_output_surface.cc

Issue 287993004: [Android WebView] Implement Ubercomp for Render Thread support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix clang compile Created 6 years, 7 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: content/browser/android/in_process/synchronous_compositor_output_surface.cc
diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.cc b/content/browser/android/in_process/synchronous_compositor_output_surface.cc
index 04abdc0c69de4d742c0629fadc43f96c102aa0be..4590ed3138390997168f8e56c8e279acbbc046b8 100644
--- a/content/browser/android/in_process/synchronous_compositor_output_surface.cc
+++ b/content/browser/android/in_process/synchronous_compositor_output_surface.cc
@@ -12,6 +12,7 @@
#include "cc/output/output_surface_client.h"
#include "cc/output/software_output_device.h"
#include "content/browser/android/in_process/synchronous_compositor_impl.h"
+#include "content/browser/gpu/compositor_util.h"
#include "content/public/browser/browser_thread.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "gpu/command_buffer/common/gpu_memory_allocation.h"
@@ -48,7 +49,7 @@ class SynchronousCompositorOutputSurface::SoftwareDevice
NOTREACHED() << "BeginPaint with no canvas set";
return &null_canvas_;
}
- LOG_IF(WARNING, surface_->did_swap_buffer_)
+ LOG_IF(WARNING, surface_->frame_holder_.get())
<< "Mutliple calls to BeginPaint per frame";
return surface_->current_sw_canvas_;
}
@@ -72,14 +73,16 @@ SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface(
routing_id_(routing_id),
needs_begin_frame_(false),
invoking_composite_(false),
- did_swap_buffer_(false),
current_sw_canvas_(NULL),
memory_policy_(0),
- output_surface_client_(NULL),
- weak_ptr_factory_(this) {
+ output_surface_client_(NULL) {
capabilities_.deferred_gl_initialization = true;
capabilities_.draw_and_swap_full_viewport_every_frame = true;
capabilities_.adjust_deadline_for_parent = false;
+ if (IsDelegatedRendererEnabled()) {
+ capabilities_.delegated_rendering = true;
+ capabilities_.max_frames_pending = 1;
+ }
// Cannot call out to GetDelegate() here as the output surface is not
// constructed on the correct thread.
@@ -136,31 +139,15 @@ void SynchronousCompositorOutputSurface::SetNeedsBeginFrame(bool enable) {
void SynchronousCompositorOutputSurface::SwapBuffers(
cc::CompositorFrame* frame) {
DCHECK(CalledOnValidThread());
- if (!ForcedDrawToSoftwareDevice()) {
+ if (!ForcedDrawToSoftwareDevice() && !IsDelegatedRendererEnabled()) {
DCHECK(context_provider_);
context_provider_->ContextGL()->ShallowFlushCHROMIUM();
}
- UpdateFrameMetaData(frame->metadata);
- did_swap_buffer_ = true;
- client_->DidSwapBuffers();
-}
-
-void SynchronousCompositorOutputSurface::UpdateFrameMetaData(
- const cc::CompositorFrameMetadata& frame_info) {
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&SynchronousCompositorOutputSurface::UpdateFrameMetaData,
- weak_ptr_factory_.GetWeakPtr(),
- frame_info));
- return;
- }
+ frame_holder_.reset(new cc::CompositorFrame);
+ frame->AssignTo(frame_holder_.get());
- SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
- if (delegate)
- delegate->UpdateFrameMetaData(frame_info);
+ client_->DidSwapBuffers();
}
namespace {
@@ -184,7 +171,8 @@ void SynchronousCompositorOutputSurface::ReleaseHwDraw() {
cc::OutputSurface::ReleaseGL();
}
-bool SynchronousCompositorOutputSurface::DemandDrawHw(
+scoped_ptr<cc::CompositorFrame>
+SynchronousCompositorOutputSurface::DemandDrawHw(
gfx::Size surface_size,
const gfx::Transform& transform,
gfx::Rect viewport,
@@ -198,10 +186,11 @@ bool SynchronousCompositorOutputSurface::DemandDrawHw(
SetExternalStencilTest(stencil_enabled);
InvokeComposite(transform, viewport, clip, true);
- return did_swap_buffer_;
+ return frame_holder_.Pass();
}
-bool SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
+scoped_ptr<cc::CompositorFrame>
+SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
DCHECK(CalledOnValidThread());
DCHECK(canvas);
DCHECK(!current_sw_canvas_);
@@ -220,7 +209,7 @@ bool SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
InvokeComposite(transform, clip, clip, false);
- return did_swap_buffer_;
+ return frame_holder_.Pass();
}
void SynchronousCompositorOutputSurface::InvokeComposite(
@@ -229,8 +218,8 @@ void SynchronousCompositorOutputSurface::InvokeComposite(
gfx::Rect clip,
bool valid_for_tile_management) {
DCHECK(!invoking_composite_);
+ DCHECK(!frame_holder_.get());
base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true);
- did_swap_buffer_ = false;
gfx::Transform adjusted_transform = transform;
AdjustTransform(&adjusted_transform, viewport);
@@ -251,7 +240,7 @@ void SynchronousCompositorOutputSurface::InvokeComposite(
cached_hw_transform_, cached_hw_viewport_, cached_hw_clip_, true);
}
- if (did_swap_buffer_)
+ if (frame_holder_.get())
client_->DidSwapBuffersComplete();
SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
@@ -259,6 +248,11 @@ void SynchronousCompositorOutputSurface::InvokeComposite(
delegate->SetContinuousInvalidate(needs_begin_frame_);
}
+void SynchronousCompositorOutputSurface::ReturnResources(
+ const cc::CompositorFrameAck& frame_ack) {
+ ReclaimResources(&frame_ack);
+}
+
void SynchronousCompositorOutputSurface::SetMemoryPolicy(
const SynchronousCompositorMemoryPolicy& policy) {
DCHECK(CalledOnValidThread());

Powered by Google App Engine
This is Rietveld 408576698