1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/browser/compositor/software_output_device_ozone.h" 6#include "third_party/skia/include/core/SkDevice.h" 7#include "ui/compositor/compositor.h" 8#include "ui/gfx/skia_util.h" 9#include "ui/gfx/vsync_provider.h" 10#include "ui/ozone/public/surface_factory_ozone.h" 11#include "ui/ozone/public/surface_ozone_canvas.h" 12 13namespace content { 14 15SoftwareOutputDeviceOzone::SoftwareOutputDeviceOzone(ui::Compositor* compositor) 16 : compositor_(compositor) { 17 ui::SurfaceFactoryOzone* factory = ui::SurfaceFactoryOzone::GetInstance(); 18 19 surface_ozone_ = factory->CreateCanvasForWidget(compositor_->widget()); 20 21 if (!surface_ozone_) 22 LOG(FATAL) << "Failed to initialize canvas"; 23 24 vsync_provider_ = surface_ozone_->CreateVSyncProvider(); 25} 26 27SoftwareOutputDeviceOzone::~SoftwareOutputDeviceOzone() { 28} 29 30void SoftwareOutputDeviceOzone::Resize(const gfx::Size& viewport_pixel_size, 31 float scale_factor) { 32 scale_factor_ = scale_factor; 33 34 if (viewport_pixel_size_ == viewport_pixel_size) 35 return; 36 37 viewport_pixel_size_ = viewport_pixel_size; 38 39 surface_ozone_->ResizeCanvas(viewport_pixel_size_); 40} 41 42SkCanvas* SoftwareOutputDeviceOzone::BeginPaint(const gfx::Rect& damage_rect) { 43 DCHECK(gfx::Rect(viewport_pixel_size_).Contains(damage_rect)); 44 45 // Get canvas for next frame. 46 canvas_ = surface_ozone_->GetCanvas(); 47 48 return SoftwareOutputDevice::BeginPaint(damage_rect); 49} 50 51void SoftwareOutputDeviceOzone::EndPaint(cc::SoftwareFrameData* frame_data) { 52 SoftwareOutputDevice::EndPaint(frame_data); 53 54 surface_ozone_->PresentCanvas(damage_rect_); 55} 56 57} // namespace content 58