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 13 namespace content { 14 SoftwareOutputDeviceOzone(ui::Compositor * compositor)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 ~SoftwareOutputDeviceOzone()27SoftwareOutputDeviceOzone::~SoftwareOutputDeviceOzone() { 28 } 29 Resize(const gfx::Size & viewport_pixel_size,float scale_factor)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 BeginPaint(const gfx::Rect & damage_rect)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 EndPaint(cc::SoftwareFrameData * frame_data)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