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

Unified Diff: content/renderer/gpu/render_widget_compositor.cc

Issue 1587743002: RenderWidgetCompositor should be decoupled from RenderWidget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 4 years, 11 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/renderer/gpu/render_widget_compositor.cc
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index 4048e3b6ffddd6a697ba655bed0f423f2a982f92..a809d30f2584ccd8c4f87bbd7318244aa81a72b9 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -45,6 +45,7 @@
#include "content/common/content_switches_internal.h"
#include "content/common/gpu/client/context_provider_command_buffer.h"
#include "content/public/common/content_switches.h"
+#include "content/renderer/gpu/render_widget_compositor_delegate.h"
#include "content/renderer/input/input_handler_manager.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "gpu/command_buffer/service/gpu_switches.h"
@@ -54,7 +55,6 @@
#include "third_party/WebKit/public/web/WebKit.h"
#include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
#include "third_party/WebKit/public/web/WebSelection.h"
-#include "third_party/WebKit/public/web/WebWidget.h"
#include "ui/gl/gl_switches.h"
#include "ui/native_theme/native_theme_switches.h"
@@ -135,7 +135,7 @@ cc::LayerSelection ConvertWebSelection(const WebSelection& web_selection) {
return cc_selection;
}
-gfx::Size CalculateDefaultTileSize(RenderWidget* widget) {
+gfx::Size CalculateDefaultTileSize(float device_scale_factor) {
int default_tile_size = 256;
#if defined(OS_ANDROID)
// TODO(epenner): unify this for all platforms if it
@@ -180,7 +180,7 @@ gfx::Size CalculateDefaultTileSize(RenderWidget* widget) {
}
#elif defined(OS_CHROMEOS)
// Use 512 for high DPI (dsf=2.0f) devices.
- if (widget->screen_info().deviceScaleFactor >= 2.0f)
+ if (device_scale_factor >= 2.0f)
default_tile_size = 512;
#endif
@@ -205,27 +205,27 @@ static cc::TopControlsState ConvertTopControlsState(
// static
scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
- RenderWidget* widget,
+ RenderWidgetCompositorDelegate* delegate,
+ float device_scale_factor,
piman 2016/01/13 22:09:30 Minor nit, this makes it sound like the device_sca
Fady Samuel 2016/01/13 23:48:13 Hmm, tile size seems like a compositor detail. I'd
piman 2016/01/14 00:13:23 There's already RWC::setDeviceScaleFactor, I would
CompositorDependencies* compositor_deps) {
scoped_ptr<RenderWidgetCompositor> compositor(
- new RenderWidgetCompositor(widget, compositor_deps));
- compositor->Initialize();
+ new RenderWidgetCompositor(delegate, compositor_deps));
+ compositor->Initialize(device_scale_factor);
return compositor;
}
RenderWidgetCompositor::RenderWidgetCompositor(
- RenderWidget* widget,
+ RenderWidgetCompositorDelegate* delegate,
CompositorDependencies* compositor_deps)
: num_failed_recreate_attempts_(0),
- widget_(widget),
+ delegate_(delegate),
compositor_deps_(compositor_deps),
never_visible_(false),
layout_and_paint_async_callback_(nullptr),
remote_proto_channel_receiver_(nullptr),
- weak_factory_(this) {
-}
+ weak_factory_(this) {}
-void RenderWidgetCompositor::Initialize() {
+void RenderWidgetCompositor::Initialize(float device_scale_factor) {
base::CommandLine* cmd = base::CommandLine::ForCurrentProcess();
cc::LayerTreeSettings settings;
@@ -257,7 +257,7 @@ void RenderWidgetCompositor::Initialize() {
blink::WebRuntimeFeatures::enableCompositorAnimationTimelines(
settings.use_compositor_animation_timelines);
- settings.default_tile_size = CalculateDefaultTileSize(widget_);
+ settings.default_tile_size = CalculateDefaultTileSize(device_scale_factor);
if (cmd->HasSwitch(switches::kDefaultTileWidth)) {
int tile_width = 0;
GetSwitchValueAsInt(*cmd,
@@ -456,7 +456,7 @@ void RenderWidgetCompositor::Initialize() {
settings.renderer_settings.use_rgba_4444_textures &=
!cmd->HasSwitch(switches::kDisableRGBA4444Textures);
- if (widget_->for_oopif()) {
+ if (delegate_->ForOOPIF()) {
// TODO(simonhong): Apply BeginFrame scheduling for OOPIF.
// See crbug.com/471411.
settings.use_external_begin_frame_source = false;
@@ -489,8 +489,7 @@ void RenderWidgetCompositor::Initialize() {
scoped_ptr<cc::BeginFrameSource> external_begin_frame_source;
if (settings.use_external_begin_frame_source) {
- external_begin_frame_source =
- compositor_deps_->CreateExternalBeginFrameSource(widget_->routing_id());
+ external_begin_frame_source = delegate_->CreateExternalBeginFrameSource();
}
cc::LayerTreeHost::InitParams params;
@@ -865,7 +864,7 @@ void RenderWidgetCompositor::setTopControlsShownRatio(float ratio) {
}
void RenderWidgetCompositor::WillBeginMainFrame() {
- widget_->WillBeginCompositorFrame();
+ delegate_->WillBeginCompositorFrame();
}
void RenderWidgetCompositor::DidBeginMainFrame() {
@@ -874,7 +873,7 @@ void RenderWidgetCompositor::DidBeginMainFrame() {
void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
compositor_deps_->GetRendererScheduler()->WillBeginFrame(args);
double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF();
- widget_->webwidget()->beginFrame(frame_time_sec);
+ delegate_->BeginMainFrame(frame_time_sec);
}
void RenderWidgetCompositor::BeginMainFrameNotExpectedSoon() {
@@ -882,8 +881,6 @@ void RenderWidgetCompositor::BeginMainFrameNotExpectedSoon() {
}
void RenderWidgetCompositor::UpdateLayerTreeHost() {
- widget_->webwidget()->updateAllLifecyclePhases();
piman 2016/01/13 22:09:30 So if I understand correctly, this moved from here
danakj 2016/01/13 22:24:33 Take a look here, the time when things run matters
Fady Samuel 2016/01/13 23:48:13 I don't want to change semantics in this CL so I'v
-
if (temporary_copy_output_request_) {
// For WebViewImpl, this will always have a root layer. For other widgets,
// the widget may be closed before servicing this request, so ignore it.
@@ -903,24 +900,16 @@ void RenderWidgetCompositor::ApplyViewportDeltas(
const gfx::Vector2dF& elastic_overscroll_delta,
float page_scale,
float top_controls_delta) {
- widget_->webwidget()->applyViewportDeltas(
- inner_delta,
- outer_delta,
- elastic_overscroll_delta,
- page_scale,
- top_controls_delta);
+ delegate_->ApplyViewportDeltas(inner_delta, outer_delta,
+ elastic_overscroll_delta, page_scale,
+ top_controls_delta);
}
void RenderWidgetCompositor::RequestNewOutputSurface() {
- // If the host is closing, then no more compositing is possible. This
- // prevents shutdown races between handling the close message and
- // the CreateOutputSurface task.
- if (widget_->host_closing())
- return;
-
bool fallback =
num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK;
- scoped_ptr<cc::OutputSurface> surface(widget_->CreateOutputSurface(fallback));
+ scoped_ptr<cc::OutputSurface> surface(
+ delegate_->CreateOutputSurface(fallback));
if (!surface) {
DidFailToInitializeOutputSurface();
@@ -954,35 +943,35 @@ void RenderWidgetCompositor::WillCommit() {
void RenderWidgetCompositor::DidCommit() {
DCHECK(!temporary_copy_output_request_);
- widget_->DidCommitCompositorFrame();
+ delegate_->DidCommitCompositorFrame();
compositor_deps_->GetRendererScheduler()->DidCommitFrameToCompositor();
}
void RenderWidgetCompositor::DidCommitAndDrawFrame() {
- widget_->DidCommitAndDrawCompositorFrame();
+ delegate_->DidCommitAndDrawCompositorFrame();
}
void RenderWidgetCompositor::DidCompleteSwapBuffers() {
- widget_->DidCompleteSwapBuffers();
+ delegate_->DidCompleteSwapBuffers();
bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get();
if (!threaded)
- widget_->OnSwapBuffersComplete();
+ delegate_->OnSwapBuffersComplete();
}
void RenderWidgetCompositor::DidCompletePageScaleAnimation() {
- widget_->DidCompletePageScaleAnimation();
+ delegate_->DidCompletePageScaleAnimation();
}
void RenderWidgetCompositor::ScheduleAnimation() {
- widget_->scheduleAnimation();
+ delegate_->ScheduleAnimation();
}
void RenderWidgetCompositor::DidPostSwapBuffers() {
- widget_->OnSwapBuffersPosted();
+ delegate_->OnSwapBuffersPosted();
}
void RenderWidgetCompositor::DidAbortSwapBuffers() {
- widget_->OnSwapBuffersAborted();
+ delegate_->OnSwapBuffersAborted();
}
void RenderWidgetCompositor::SetProtoReceiver(ProtoReceiver* receiver) {
@@ -995,39 +984,14 @@ void RenderWidgetCompositor::SendCompositorProto(
size_t unsigned_size = base::checked_cast<size_t>(signed_size);
std::vector<uint8_t> serialized(unsigned_size);
proto.SerializeToArray(serialized.data(), signed_size);
- widget_->ForwardCompositorProto(serialized);
+ delegate_->ForwardCompositorProto(serialized);
}
void RenderWidgetCompositor::RecordFrameTimingEvents(
scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events,
scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
- for (const auto& composite_event : *composite_events ) {
- int64_t frameId = composite_event.first;
- const std::vector<cc::FrameTimingTracker::CompositeTimingEvent>& events =
- composite_event.second;
- std::vector<blink::WebFrameTimingEvent> webEvents;
- for (size_t i = 0; i < events.size(); ++i) {
- webEvents.push_back(blink::WebFrameTimingEvent(
- events[i].frame_id,
- (events[i].timestamp - base::TimeTicks()).InSecondsF()));
- }
- widget_->webwidget()->recordFrameTimingEvent(
- blink::WebWidget::CompositeEvent, frameId, webEvents);
- }
- for (const auto& main_frame_event : *main_frame_events ) {
- int64_t frameId = main_frame_event.first;
- const std::vector<cc::FrameTimingTracker::MainFrameTimingEvent>& events =
- main_frame_event.second;
- std::vector<blink::WebFrameTimingEvent> webEvents;
- for (size_t i = 0; i < events.size(); ++i) {
- webEvents.push_back(blink::WebFrameTimingEvent(
- events[i].frame_id,
- (events[i].timestamp - base::TimeTicks()).InSecondsF(),
- (events[i].end_time - base::TimeTicks()).InSecondsF()));
- }
- widget_->webwidget()->recordFrameTimingEvent(
- blink::WebWidget::RenderEvent, frameId, webEvents);
- }
+ delegate_->RecordFrameTimingEvents(std::move(composite_events),
+ std::move(main_frame_events));
}
void RenderWidgetCompositor::SetSurfaceIdNamespace(

Powered by Google App Engine
This is Rietveld 408576698