| Index: content/browser/renderer_host/compositing_iosurface_mac.mm
|
| diff --git a/content/browser/renderer_host/compositing_iosurface_mac.mm b/content/browser/renderer_host/compositing_iosurface_mac.mm
|
| index 40bb0e42945297a5f30755ec268627b46ec8e311..e58adcba741a84703061b4383358b1425614a772 100644
|
| --- a/content/browser/renderer_host/compositing_iosurface_mac.mm
|
| +++ b/content/browser/renderer_host/compositing_iosurface_mac.mm
|
| @@ -335,13 +335,6 @@ void CompositingIOSurfaceMac::SwitchToContextOnNewWindow(
|
| context_ = new_context;
|
| }
|
|
|
| -void CompositingIOSurfaceMac::SetDeviceScaleFactor(float scale_factor) {
|
| - // TODO: After a resolution change, the DPI-ness of the view and the
|
| - // IOSurface might not be in sync.
|
| - io_surface_size_ = gfx::ToFlooredSize(
|
| - gfx::ScaleSize(pixel_io_surface_size_, 1.0 / scale_factor));
|
| -}
|
| -
|
| bool CompositingIOSurfaceMac::is_vsync_disabled() const {
|
| return context_->is_vsync_disabled();
|
| }
|
| @@ -366,8 +359,11 @@ CompositingIOSurfaceMac::~CompositingIOSurfaceMac() {
|
| }
|
|
|
| void CompositingIOSurfaceMac::SetIOSurface(uint64 io_surface_handle,
|
| - const gfx::Size& size) {
|
| + const gfx::Size& size,
|
| + float scale_factor) {
|
| pixel_io_surface_size_ = size;
|
| + dip_io_surface_size_ = gfx::ToFlooredSize(
|
| + gfx::ScaleSize(pixel_io_surface_size_, 1.0 / scale_factor));
|
| CGLSetCurrentContext(context_->cgl_context());
|
| MapIOSurfaceToTexture(io_surface_handle);
|
| CGLSetCurrentContext(0);
|
| @@ -407,17 +403,15 @@ void CompositingIOSurfaceMac::DrawIOSurface(
|
| gfx::ScaleSize(window_size, scale_factor));
|
| glViewport(0, 0, pixel_window_size.width(), pixel_window_size.height());
|
|
|
| - SetDeviceScaleFactor(scale_factor);
|
| -
|
| SurfaceQuad quad;
|
| - quad.set_size(io_surface_size_, pixel_io_surface_size_);
|
| + quad.set_size(dip_io_surface_size_, pixel_io_surface_size_);
|
|
|
| glMatrixMode(GL_PROJECTION);
|
| glLoadIdentity();
|
|
|
| // Note that the projection keeps things in view units, so the use of
|
| - // window_size / io_surface_size_ (as opposed to the pixel_ variants) below is
|
| - // correct.
|
| + // window_size / dip_io_surface_size_ (as opposed to the pixel_ variants)
|
| + // below is correct.
|
| glOrtho(0, window_size.width(), window_size.height(), 0, -1, 1);
|
| glMatrixMode(GL_MODELVIEW);
|
| glLoadIdentity();
|
| @@ -435,20 +429,21 @@ void CompositingIOSurfaceMac::DrawIOSurface(
|
| glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); CHECK_GL_ERROR();
|
|
|
| // Fill the resize gutters with white.
|
| - if (window_size.width() > io_surface_size_.width() ||
|
| - window_size.height() > io_surface_size_.height()) {
|
| + if (window_size.width() > dip_io_surface_size_.width() ||
|
| + window_size.height() > dip_io_surface_size_.height()) {
|
| context_->shader_program_cache()->UseSolidWhiteProgram();
|
| SurfaceQuad filler_quad;
|
| - if (window_size.width() > io_surface_size_.width()) {
|
| + if (window_size.width() > dip_io_surface_size_.width()) {
|
| // Draw right-side gutter down to the bottom of the window.
|
| - filler_quad.set_rect(io_surface_size_.width(), 0.0f,
|
| + filler_quad.set_rect(dip_io_surface_size_.width(), 0.0f,
|
| window_size.width(), window_size.height());
|
| DrawQuad(filler_quad);
|
| }
|
| - if (window_size.height() > io_surface_size_.height()) {
|
| + if (window_size.height() > dip_io_surface_size_.height()) {
|
| // Draw bottom gutter to the width of the IOSurface.
|
| - filler_quad.set_rect(0.0f, io_surface_size_.height(),
|
| - io_surface_size_.width(), window_size.height());
|
| + filler_quad.set_rect(
|
| + 0.0f, dip_io_surface_size_.height(),
|
| + dip_io_surface_size_.width(), window_size.height());
|
| DrawQuad(filler_quad);
|
| }
|
| }
|
| @@ -500,7 +495,7 @@ void CompositingIOSurfaceMac::DrawIOSurface(
|
| RenderWidgetHostViewFrameSubscriber::DeliverFrameCallback callback;
|
| if (frame_subscriber->ShouldCaptureFrame(present_time, &frame, &callback)) {
|
| copy_done_callback = CopyToVideoFrameWithinContext(
|
| - gfx::Rect(pixel_io_surface_size_), scale_factor, true, frame,
|
| + gfx::Rect(pixel_io_surface_size_), true, frame,
|
| base::Bind(callback, present_time));
|
| }
|
| }
|
| @@ -530,7 +525,6 @@ void CompositingIOSurfaceMac::DrawIOSurface(
|
|
|
| void CompositingIOSurfaceMac::CopyTo(
|
| const gfx::Rect& src_pixel_subrect,
|
| - float src_scale_factor,
|
| const gfx::Size& dst_pixel_size,
|
| const base::Callback<void(bool, const SkBitmap&)>& callback) {
|
| scoped_ptr<SkBitmap> output(new SkBitmap());
|
| @@ -547,7 +541,7 @@ void CompositingIOSurfaceMac::CopyTo(
|
|
|
| CGLSetCurrentContext(context_->cgl_context());
|
| const base::Closure copy_done_callback = CopyToSelectedOutputWithinContext(
|
| - src_pixel_subrect, src_scale_factor, gfx::Rect(dst_pixel_size), false,
|
| + src_pixel_subrect, gfx::Rect(dst_pixel_size), false,
|
| output.get(), NULL,
|
| base::Bind(&ReverseArgumentOrder, callback, base::Passed(&output)));
|
| CGLSetCurrentContext(0);
|
| @@ -557,12 +551,11 @@ void CompositingIOSurfaceMac::CopyTo(
|
|
|
| void CompositingIOSurfaceMac::CopyToVideoFrame(
|
| const gfx::Rect& src_pixel_subrect,
|
| - float src_scale_factor,
|
| const scoped_refptr<media::VideoFrame>& target,
|
| const base::Callback<void(bool)>& callback) {
|
| CGLSetCurrentContext(context_->cgl_context());
|
| const base::Closure copy_done_callback = CopyToVideoFrameWithinContext(
|
| - src_pixel_subrect, src_scale_factor, false, target, callback);
|
| + src_pixel_subrect, false, target, callback);
|
| CGLSetCurrentContext(0);
|
| if (!copy_done_callback.is_null())
|
| copy_done_callback.Run();
|
| @@ -570,7 +563,6 @@ void CompositingIOSurfaceMac::CopyToVideoFrame(
|
|
|
| base::Closure CompositingIOSurfaceMac::CopyToVideoFrameWithinContext(
|
| const gfx::Rect& src_pixel_subrect,
|
| - float src_scale_factor,
|
| bool called_within_draw,
|
| const scoped_refptr<media::VideoFrame>& target,
|
| const base::Callback<void(bool)>& callback) {
|
| @@ -588,7 +580,7 @@ base::Closure CompositingIOSurfaceMac::CopyToVideoFrameWithinContext(
|
| DCHECK_LE(region_in_frame.bottom(), target->coded_size().height());
|
|
|
| return CopyToSelectedOutputWithinContext(
|
| - src_pixel_subrect, src_scale_factor, region_in_frame, called_within_draw,
|
| + src_pixel_subrect, region_in_frame, called_within_draw,
|
| NULL, target, callback);
|
| }
|
|
|
| @@ -617,10 +609,6 @@ bool CompositingIOSurfaceMac::MapIOSurfaceToTexture(
|
| io_surface_support_->IOSurfaceGetWidth(io_surface_),
|
| io_surface_support_->IOSurfaceGetHeight(io_surface_));
|
|
|
| - // TODO(thakis): Keep track of the view size over IPC. At the moment,
|
| - // the correct view units are computed on first paint.
|
| - io_surface_size_ = pixel_io_surface_size_;
|
| -
|
| GLenum target = GL_TEXTURE_RECTANGLE_ARB;
|
| glGenTextures(1, &texture_);
|
| glBindTexture(target, texture_);
|
| @@ -782,7 +770,6 @@ bool CompositingIOSurfaceMac::IsAsynchronousReadbackSupported() {
|
|
|
| base::Closure CompositingIOSurfaceMac::CopyToSelectedOutputWithinContext(
|
| const gfx::Rect& src_pixel_subrect,
|
| - float src_scale_factor,
|
| const gfx::Rect& dst_pixel_rect,
|
| bool called_within_draw,
|
| const SkBitmap* bitmap_output,
|
| @@ -819,8 +806,7 @@ base::Closure CompositingIOSurfaceMac::CopyToSelectedOutputWithinContext(
|
| return base::Bind(done_callback, false);
|
|
|
| // Send transform commands to the GPU.
|
| - const gfx::Rect src_rect = IntersectWithIOSurface(src_pixel_subrect,
|
| - src_scale_factor);
|
| + const gfx::Rect src_rect = IntersectWithIOSurface(src_pixel_subrect);
|
| copy_context->num_outputs = 0;
|
| if (bitmap_output) {
|
| if (copy_context->transformer->ResizeBilinear(
|
| @@ -1074,10 +1060,9 @@ void CompositingIOSurfaceMac::DestroyAllCopyContextsWithinContext() {
|
| }
|
|
|
| gfx::Rect CompositingIOSurfaceMac::IntersectWithIOSurface(
|
| - const gfx::Rect& rect, float scale_factor) const {
|
| + const gfx::Rect& rect) const {
|
| return gfx::IntersectRects(rect,
|
| - gfx::ToEnclosingRect(gfx::ScaleRect(gfx::Rect(io_surface_size_),
|
| - scale_factor)));
|
| + gfx::ToEnclosingRect(gfx::Rect(pixel_io_surface_size_)));
|
| }
|
|
|
| } // namespace content
|
|
|