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

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: comments 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 de609c3c7eb1a80fef535c4a6482c75afd5eae46..fb7f2fd6dc68392b40dc478ed235b07e4e85c897 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"
@@ -74,11 +75,14 @@ SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface(
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;
danakj 2014/05/20 21:50:02 Is this still needed here then? The browser side i
boliu 2014/05/21 01:33:26 Still needed for software path, which child compos
capabilities_.adjust_deadline_for_parent = false;
danakj 2014/05/20 21:50:02 Still needed?
boliu 2014/05/21 19:58:22 Yes. This is to avoid enabling part of the deadlin
danakj 2014/05/21 20:01:01 This is true for the browser compositor, but is th
boliu 2014/05/21 20:12:20 This renderer compositor still needs to be synchro
danakj 2014/05/21 20:13:39 Oh ok. Ya, I bumped into onDraw in the removal of
+ 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.
@@ -139,29 +143,14 @@ void SynchronousCompositorOutputSurface::SwapBuffers(
DCHECK(context_provider_);
context_provider_->ContextGL()->ShallowFlushCHROMIUM();
}
- UpdateFrameMetaData(frame->metadata);
+
+ DCHECK(frame_);
+ frame->AssignTo(frame_);
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;
- }
-
- SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
- if (delegate)
- delegate->UpdateFrameMetaData(frame_info);
-}
-
namespace {
void AdjustTransform(gfx::Transform* transform, gfx::Rect viewport) {
// CC's draw origin starts at the viewport.
@@ -188,11 +177,13 @@ bool SynchronousCompositorOutputSurface::DemandDrawHw(
const gfx::Transform& transform,
gfx::Rect viewport,
gfx::Rect clip,
- bool stencil_enabled) {
+ bool stencil_enabled,
+ cc::CompositorFrame* frame) {
danakj 2014/05/20 21:50:02 It feels a bit awkward to be passing in a Composit
DCHECK(CalledOnValidThread());
DCHECK(HasClient());
DCHECK(context_provider_);
+ base::AutoReset<cc::CompositorFrame*> frame_resetter(&frame_, frame);
surface_size_ = surface_size;
SetExternalStencilTest(stencil_enabled);
InvokeComposite(transform, viewport, clip, true);
@@ -200,10 +191,13 @@ bool SynchronousCompositorOutputSurface::DemandDrawHw(
return did_swap_buffer_;
}
-bool SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
+bool SynchronousCompositorOutputSurface::DemandDrawSw(
+ SkCanvas* canvas,
+ cc::CompositorFrame* frame) {
DCHECK(CalledOnValidThread());
DCHECK(canvas);
DCHECK(!current_sw_canvas_);
+ base::AutoReset<cc::CompositorFrame*> frame_resetter(&frame_, frame);
base::AutoReset<SkCanvas*> canvas_resetter(&current_sw_canvas_, canvas);
SkIRect canvas_clip;
@@ -258,6 +252,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