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

Side by Side Diff: sky/shell/ui/engine.cc

Issue 1221033006: Teach Stocks.apk how to load a skyx bundle (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: again Created 5 years, 5 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 unified diff | Download patch
« no previous file with comments | « sky/shell/ui/engine.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sky/shell/ui/engine.h" 5 #include "sky/shell/ui/engine.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/threading/worker_pool.h" 9 #include "base/threading/worker_pool.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
11 #include "mojo/common/data_pipe_utils.h" 11 #include "mojo/common/data_pipe_utils.h"
12 #include "mojo/public/cpp/application/connect.h" 12 #include "mojo/public/cpp/application/connect.h"
13 #include "services/asset_bundle/asset_unpacker_job.h"
13 #include "sky/engine/public/platform/WebInputEvent.h" 14 #include "sky/engine/public/platform/WebInputEvent.h"
14 #include "sky/engine/public/platform/sky_display_metrics.h" 15 #include "sky/engine/public/platform/sky_display_metrics.h"
15 #include "sky/engine/public/platform/sky_display_metrics.h" 16 #include "sky/engine/public/platform/sky_display_metrics.h"
16 #include "sky/engine/public/web/Sky.h" 17 #include "sky/engine/public/web/Sky.h"
17 #include "sky/services/platform/platform_impl.h" 18 #include "sky/services/platform/platform_impl.h"
18 #include "sky/shell/dart/dart_library_provider_files.h" 19 #include "sky/shell/dart/dart_library_provider_files.h"
19 #include "sky/shell/dart/dart_library_provider_network.h" 20 #include "sky/shell/dart/dart_library_provider_network.h"
20 #include "sky/shell/service_provider.h" 21 #include "sky/shell/service_provider.h"
21 #include "sky/shell/ui/animator.h" 22 #include "sky/shell/ui/animator.h"
22 #include "sky/shell/ui/input_event_converter.h" 23 #include "sky/shell/ui/input_event_converter.h"
23 #include "sky/shell/ui/internals.h" 24 #include "sky/shell/ui/internals.h"
24 #include "third_party/skia/include/core/SkCanvas.h" 25 #include "third_party/skia/include/core/SkCanvas.h"
25 #include "third_party/skia/include/core/SkPictureRecorder.h" 26 #include "third_party/skia/include/core/SkPictureRecorder.h"
26 27
27 namespace sky { 28 namespace sky {
28 namespace shell { 29 namespace shell {
29 30
31 const char kSnapshotKey[] = "snapshot_blob.bin";
32
30 namespace { 33 namespace {
31 34
32 void Ignored(bool) { 35 void Ignored(bool) {
33 } 36 }
34 37
35 mojo::ScopedDataPipeConsumerHandle Fetch(const base::FilePath& path) { 38 mojo::ScopedDataPipeConsumerHandle Fetch(const base::FilePath& path) {
36 mojo::DataPipe pipe; 39 mojo::DataPipe pipe;
37 auto runner = base::WorkerPool::GetTaskRunner(true); 40 auto runner = base::WorkerPool::GetTaskRunner(true);
38 mojo::common::CopyFromFile(base::FilePath(path), pipe.producer_handle.Pass(), 41 mojo::common::CopyFromFile(base::FilePath(path), pipe.producer_handle.Pass(),
39 0, runner.get(), base::Bind(&Ignored)); 42 0, runner.get(), base::Bind(&Ignored));
40 return pipe.consumer_handle.Pass(); 43 return pipe.consumer_handle.Pass();
41 } 44 }
42 45
43 PlatformImpl* g_platform_impl = nullptr; 46 PlatformImpl* g_platform_impl = nullptr;
44 47
45 } 48 } // namespace
49
50 using mojo::asset_bundle::AssetUnpackerJob;
46 51
47 Engine::Config::Config() { 52 Engine::Config::Config() {
48 } 53 }
49 54
50 Engine::Config::~Config() { 55 Engine::Config::~Config() {
51 } 56 }
52 57
53 Engine::Engine(const Config& config) 58 Engine::Engine(const Config& config)
54 : config_(config), 59 : config_(config),
55 animator_(new Animator(config, this)), 60 animator_(new Animator(config, this)),
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 void Engine::OnInputEvent(InputEventPtr event) { 148 void Engine::OnInputEvent(InputEventPtr event) {
144 TRACE_EVENT0("sky", "Engine::OnInputEvent"); 149 TRACE_EVENT0("sky", "Engine::OnInputEvent");
145 scoped_ptr<blink::WebInputEvent> web_event = 150 scoped_ptr<blink::WebInputEvent> web_event =
146 ConvertEvent(event, device_pixel_ratio_); 151 ConvertEvent(event, device_pixel_ratio_);
147 if (!web_event) 152 if (!web_event)
148 return; 153 return;
149 if (sky_view_) 154 if (sky_view_)
150 sky_view_->HandleInputEvent(*web_event); 155 sky_view_->HandleInputEvent(*web_event);
151 } 156 }
152 157
153 void Engine::RunFromLibrary(const mojo::String& name) { 158 void Engine::RunFromLibrary(const std::string& name) {
154 sky_view_ = blink::SkyView::Create(this); 159 sky_view_ = blink::SkyView::Create(this);
155 sky_view_->RunFromLibrary(blink::WebString::fromUTF8(name), 160 sky_view_->RunFromLibrary(blink::WebString::fromUTF8(name),
156 dart_library_provider_.get()); 161 dart_library_provider_.get());
157 UpdateSkyViewSize(); 162 UpdateSkyViewSize();
158 } 163 }
159 164
165 void Engine::RunFromSnapshotStream(
166 const std::string& name,
167 mojo::ScopedDataPipeConsumerHandle snapshot) {
168 sky_view_ = blink::SkyView::Create(this);
169 sky_view_->RunFromSnapshot(blink::WebString::fromUTF8(name), snapshot.Pass());
170 UpdateSkyViewSize();
171 }
172
160 void Engine::RunFromNetwork(const mojo::String& url) { 173 void Engine::RunFromNetwork(const mojo::String& url) {
161 dart_library_provider_.reset( 174 dart_library_provider_.reset(
162 new DartLibraryProviderNetwork(g_platform_impl->networkService())); 175 new DartLibraryProviderNetwork(g_platform_impl->networkService()));
163 RunFromLibrary(url); 176 RunFromLibrary(url);
164 } 177 }
165 178
166 void Engine::RunFromFile(const mojo::String& main, 179 void Engine::RunFromFile(const mojo::String& main,
167 const mojo::String& package_root) { 180 const mojo::String& package_root) {
168 dart_library_provider_.reset( 181 dart_library_provider_.reset(
169 new DartLibraryProviderFiles(base::FilePath(package_root))); 182 new DartLibraryProviderFiles(base::FilePath(package_root)));
170 RunFromLibrary(main); 183 RunFromLibrary(main);
171 } 184 }
172 185
173 void Engine::RunFromSnapshot(const mojo::String& path) { 186 void Engine::RunFromSnapshot(const mojo::String& path) {
174 sky_view_ = blink::SkyView::Create(this); 187 std::string path_str = path;
175 sky_view_->RunFromSnapshot(blink::WebString::fromUTF8(path), 188 RunFromSnapshotStream(path_str, Fetch(base::FilePath(path_str)));
176 Fetch(base::FilePath(path))); 189 }
177 UpdateSkyViewSize(); 190
191 void Engine::RunFromBundle(const mojo::String& path) {
192 AssetUnpackerJob* unpacker = new AssetUnpackerJob(
193 mojo::GetProxy(&root_bundle_), base::WorkerPool::GetTaskRunner(true));
194 std::string path_str = path;
195 unpacker->Unpack(Fetch(base::FilePath(path_str)));
196 root_bundle_->GetAsStream(kSnapshotKey,
197 base::Bind(&Engine::RunFromSnapshotStream,
198 weak_factory_.GetWeakPtr(), path_str));
178 } 199 }
179 200
180 void Engine::DidCreateIsolate(Dart_Isolate isolate) { 201 void Engine::DidCreateIsolate(Dart_Isolate isolate) {
181 Internals::Create(isolate, 202 Internals::Create(isolate,
182 CreateServiceProvider(config_.service_provider_context)); 203 CreateServiceProvider(config_.service_provider_context));
183 } 204 }
184 205
185 void Engine::ScheduleFrame() { 206 void Engine::ScheduleFrame() {
186 animator_->RequestFrame(); 207 animator_->RequestFrame();
187 } 208 }
(...skipping 12 matching lines...) Expand all
200 221
201 void Engine::DidNavigateLocally(const mojo::String& url) { 222 void Engine::DidNavigateLocally(const mojo::String& url) {
202 } 223 }
203 224
204 void Engine::RequestNavigateHistory(int32_t delta) { 225 void Engine::RequestNavigateHistory(int32_t delta) {
205 NOTIMPLEMENTED(); 226 NOTIMPLEMENTED();
206 } 227 }
207 228
208 } // namespace shell 229 } // namespace shell
209 } // namespace sky 230 } // namespace sky
OLDNEW
« no previous file with comments | « sky/shell/ui/engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698