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

Unified Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 418283003: "Buttery Smooth" Tab Capture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Un-inline some methods, plus REBASE. Created 6 years, 4 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/renderer_host/render_widget_host_view_mac.mm
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index e60324ab17ec68eb6b35d246bc9e7925e470bf7a..6d0f1362d976a96391330ce860886c5cf1bce9aa 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -72,6 +72,7 @@
#include "ui/compositor/compositor.h"
#include "ui/compositor/layer.h"
#include "ui/gfx/display.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect_conversions.h"
#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
@@ -864,12 +865,13 @@ void RenderWidgetHostViewMac::SendVSyncParametersToRenderer() {
if (!render_widget_host_ || !display_link_)
return;
- base::TimeTicks timebase;
- base::TimeDelta interval;
- if (!display_link_->GetVSyncParameters(&timebase, &interval))
+ if (!display_link_->GetVSyncParameters(&vsync_timebase_, &vsync_interval_)) {
+ vsync_timebase_ = base::TimeTicks();
+ vsync_interval_ = base::TimeDelta();
return;
+ }
- render_widget_host_->UpdateVSyncParameters(timebase, interval);
+ render_widget_host_->UpdateVSyncParameters(vsync_timebase_, vsync_interval_);
}
void RenderWidgetHostViewMac::UpdateBackingStoreScaleFactor() {
@@ -1428,6 +1430,7 @@ void RenderWidgetHostViewMac::PluginImeCompositionCompleted(
void RenderWidgetHostViewMac::CompositorSwapBuffers(
IOSurfaceID surface_handle,
+ const gfx::Rect& damage_rect,
const gfx::Size& size,
float surface_scale_factor,
const std::vector<ui::LatencyInfo>& latency_info) {
@@ -1486,11 +1489,20 @@ void RenderWidgetHostViewMac::CompositorSwapBuffers(
// current context afterward.
bool frame_was_captured = false;
if (frame_subscriber_) {
- const base::TimeTicks present_time = base::TimeTicks::Now();
+ const base::TimeTicks now = gfx::FrameTime::Now();
+ base::TimeTicks present_time;
+ if (vsync_timebase_.is_null() || vsync_interval_ <= base::TimeDelta()) {
+ present_time = now;
+ } else {
+ const int64 intervals_elapsed = (now - vsync_timebase_) / vsync_interval_;
+ present_time = vsync_timebase_ +
+ (intervals_elapsed + 1) * vsync_interval_;
+ }
+
scoped_refptr<media::VideoFrame> frame;
RenderWidgetHostViewFrameSubscriber::DeliverFrameCallback callback;
- if (frame_subscriber_->ShouldCaptureFrame(present_time,
- &frame, &callback)) {
+ if (frame_subscriber_->ShouldCaptureFrame(
+ damage_rect, present_time, &frame, &callback)) {
// Flush the context that updated the IOSurface, to ensure that the
// context that does the copy picks up the correct version.
{
@@ -1746,6 +1758,7 @@ void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped(
params.surface_handle);
CompositorSwapBuffers(io_surface_id,
+ gfx::Rect(),
params.size,
params.scale_factor,
params.latency_info);
@@ -1790,10 +1803,12 @@ void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer(
gpu_host_id,
compositing_iosurface_ ?
compositing_iosurface_->GetRendererID() : 0);
- CompositorSwapBuffers(IOSurfaceIDFromSurfaceHandle(params.surface_handle),
- params.surface_size,
- params.surface_scale_factor,
- params.latency_info);
+ CompositorSwapBuffers(
+ IOSurfaceIDFromSurfaceHandle(params.surface_handle),
+ gfx::Rect(params.x, params.y, params.width, params.height),
+ params.surface_size,
+ params.surface_scale_factor,
+ params.latency_info);
}
void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() {

Powered by Google App Engine
This is Rietveld 408576698