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

Unified Diff: sky/shell/ui/engine.cc

Issue 936883002: Connect Sky and Ganesh in SkyShell (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Address review comments Created 5 years, 10 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 | « sky/shell/ui/engine.h ('k') | sky/shell/ui/platform_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/shell/ui/engine.cc
diff --git a/sky/shell/ui/engine.cc b/sky/shell/ui/engine.cc
index 07deb847c24e59da3022b478b6b4f12c87ab4044..b316c4cfed2fdb0d8ac5fe95bc577df6b9b1caa2 100644
--- a/sky/shell/ui/engine.cc
+++ b/sky/shell/ui/engine.cc
@@ -4,15 +4,22 @@
#include "sky/shell/ui/engine.h"
+#include "base/bind.h"
#include "sky/engine/public/web/Sky.h"
#include "sky/engine/public/web/WebLocalFrame.h"
#include "sky/engine/public/web/WebView.h"
+#include "sky/shell/ui/animator.h"
#include "sky/shell/ui/platform_impl.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkPictureRecorder.h"
namespace sky {
namespace shell {
-Engine::Engine() : web_view_(nullptr), weak_factory_(this) {
+Engine::Engine(const Config& config)
+ : animator_(new Animator(config, this)),
+ web_view_(nullptr),
+ weak_factory_(this) {
}
Engine::~Engine() {
@@ -24,20 +31,53 @@ base::WeakPtr<Engine> Engine::GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
-void Engine::Init() {
- platform_impl_.reset(new PlatformImpl);
+void Engine::Init(mojo::ScopedMessagePipeHandle service_provider) {
+ platform_impl_.reset(new PlatformImpl(
+ mojo::MakeProxy<mojo::ServiceProvider>(service_provider.Pass())));
blink::initialize(platform_impl_.get());
web_view_ = blink::WebView::create(this);
web_view_->setMainFrame(blink::WebLocalFrame::create(this));
+ web_view_->mainFrame()->load(
+ GURL("http://127.0.0.1:8000/sky/examples/spinning-square.sky"));
}
-void Engine::OnViewportMetricsChanged(const gfx::Size& size,
+void Engine::BeginFrame(base::TimeTicks frame_time) {
+ double frame_time_sec = (frame_time - base::TimeTicks()).InSecondsF();
+ double deadline_sec = frame_time_sec;
+ double interval_sec = 1.0 / 60;
+ blink::WebBeginFrameArgs args(frame_time_sec, deadline_sec, interval_sec);
+
+ web_view_->beginFrame(args);
+ web_view_->layout();
+}
+
+skia::RefPtr<SkPicture> Engine::Paint() {
+ SkRTreeFactory factory;
+ SkPictureRecorder recorder;
+ auto canvas = skia::SharePtr(recorder.beginRecording(
+ physical_size_.width(), physical_size_.height(), &factory,
+ SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag));
+
+ web_view_->paint(canvas.get(), blink::WebRect(gfx::Rect(physical_size_)));
+ return skia::AdoptRef(recorder.endRecordingAsPicture());
+}
+
+void Engine::OnViewportMetricsChanged(const gfx::Size& physical_size,
float device_pixel_ratio) {
- blink::WebSize web_size(size.width() / device_pixel_ratio,
- size.height() / device_pixel_ratio);
+ physical_size_ = physical_size;
web_view_->setDeviceScaleFactor(device_pixel_ratio);
- web_view_->resize(web_size);
+ gfx::SizeF size = gfx::ScaleSize(physical_size, 1 / device_pixel_ratio);
+ // FIXME: We should be able to set the size of the WebView in floating point
+ // because its in logical pixels.
+ web_view_->resize(blink::WebSize(size.width(), size.height()));
+}
+
+void Engine::initializeLayerTreeView() {
+}
+
+void Engine::scheduleVisualUpdate() {
+ animator_->RequestFrame();
}
} // namespace shell
« no previous file with comments | « sky/shell/ui/engine.h ('k') | sky/shell/ui/platform_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698