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

Unified Diff: ui/ozone/demo/software_renderer.cc

Issue 1285183008: Ozone integration. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: add missing license header Created 5 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
« no previous file with comments | « ui/ozone/demo/software_renderer.h ('k') | ui/ozone/demo/surfaceless_gl_renderer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/ozone/demo/software_renderer.cc
diff --git a/ui/ozone/demo/software_renderer.cc b/ui/ozone/demo/software_renderer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..162d5e0e4b43c5e101d332085bbcdd40c1592dfa
--- /dev/null
+++ b/ui/ozone/demo/software_renderer.cc
@@ -0,0 +1,72 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/ozone/demo/software_renderer.h"
+
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkSurface.h"
+#include "ui/gfx/vsync_provider.h"
+#include "ui/ozone/public/ozone_platform.h"
+#include "ui/ozone/public/surface_factory_ozone.h"
+#include "ui/ozone/public/surface_ozone_canvas.h"
+
+namespace ui {
+namespace {
+
+const int kFrameDelayMilliseconds = 16;
+
+} // namespace
+
+SoftwareRenderer::SoftwareRenderer(gfx::AcceleratedWidget widget,
+ const gfx::Size& size)
+ : RendererBase(widget, size),
+ vsync_period_(base::TimeDelta::FromMilliseconds(kFrameDelayMilliseconds)),
+ weak_ptr_factory_(this) {
+}
+
+SoftwareRenderer::~SoftwareRenderer() {
+}
+
+bool SoftwareRenderer::Initialize() {
+ software_surface_ = ui::OzonePlatform::GetInstance()
+ ->GetSurfaceFactoryOzone()
+ ->CreateCanvasForWidget(widget_);
+ if (!software_surface_) {
+ LOG(ERROR) << "Failed to create software surface";
+ return false;
+ }
+
+ software_surface_->ResizeCanvas(size_);
+ vsync_provider_ = software_surface_->CreateVSyncProvider();
+ RenderFrame();
+ return true;
+}
+
+void SoftwareRenderer::RenderFrame() {
+ float fraction = NextFraction();
+
+ skia::RefPtr<SkSurface> surface = software_surface_->GetSurface();
+
+ SkColor color =
+ SkColorSetARGB(0xff, 0, 0xff * fraction, 0xff * (1 - fraction));
+
+ surface->getCanvas()->clear(color);
+
+ software_surface_->PresentCanvas(gfx::Rect(size_));
+
+ if (vsync_provider_) {
+ vsync_provider_->GetVSyncParameters(
+ base::Bind(&SoftwareRenderer::UpdateVSyncParameters,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
+
+ timer_.Start(FROM_HERE, vsync_period_, this, &SoftwareRenderer::RenderFrame);
+}
+
+void SoftwareRenderer::UpdateVSyncParameters(const base::TimeTicks timebase,
+ const base::TimeDelta interval) {
+ vsync_period_ = interval;
+}
+
+} // namespace ui
« no previous file with comments | « ui/ozone/demo/software_renderer.h ('k') | ui/ozone/demo/surfaceless_gl_renderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698