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( |