engine.h 4.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
// Copyright 2015 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.

#ifndef SKY_SHELL_UI_ENGINE_H_
#define SKY_SHELL_UI_ENGINE_H_

#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
A
Adam Barth 已提交
11
#include "base/single_thread_task_runner.h"
12
#include "mojo/public/cpp/bindings/binding.h"
A
Adam Barth 已提交
13
#include "mojo/public/cpp/system/core.h"
14
#include "mojo/public/cpp/system/data_pipe.h"
15
#include "mojo/public/interfaces/application/service_provider.mojom.h"
16
#include "mojo/services/asset_bundle/public/interfaces/asset_bundle.mojom.h"
17
#include "mojo/services/navigation/public/interfaces/navigation.mojom.h"
18
#include "mojo/services/network/public/interfaces/network_service.mojom.h"
A
Adam Barth 已提交
19
#include "skia/ext/refptr.h"
20
#include "sky/engine/public/platform/ServiceProvider.h"
21
#include "sky/engine/public/sky/sky_view.h"
A
Adam Barth 已提交
22
#include "sky/engine/public/sky/sky_view_client.h"
A
Adam Barth 已提交
23
#include "sky/shell/gpu_delegate.h"
24
#include "sky/shell/service_provider.h"
25
#include "sky/shell/ui_delegate.h"
A
Adam Barth 已提交
26
#include "third_party/skia/include/core/SkPicture.h"
27
#include "ui/gfx/geometry/size.h"
28 29

namespace sky {
30
class PlatformImpl;
31
namespace shell {
A
Adam Barth 已提交
32
class Animator;
33

34
class Engine : public UIDelegate,
35
               public SkyEngine,
36 37
               public blink::ServiceProvider,
               public mojo::NavigatorHost,
A
Adam Barth 已提交
38
               public blink::SkyViewClient {
39
 public:
A
Adam Barth 已提交
40
  struct Config {
A
Adam Barth 已提交
41 42 43
    Config();
    ~Config();

44
    ServiceProviderContext* service_provider_context;
A
Adam Barth 已提交
45

A
Adam Barth 已提交
46 47 48 49 50
    base::WeakPtr<GPUDelegate> gpu_delegate;
    scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner;
  };

  explicit Engine(const Config& config);
51 52 53 54
  ~Engine() override;

  base::WeakPtr<Engine> GetWeakPtr();

55
  static void Init();
56

A
Adam Barth 已提交
57
  void BeginFrame(base::TimeTicks frame_time);
A
Adam Barth 已提交
58
  PassRefPtr<SkPicture> Paint();
59
  const gfx::Size& physical_size() { return physical_size_; }
60

61 62 63
  void StartDartTracing();
  void StopDartTracing(mojo::ScopedDataPipeProducerHandle producer);

64
 private:
65 66
  // UIDelegate implementation:
  void ConnectToEngine(mojo::InterfaceRequest<SkyEngine> request) override;
67 68
  void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override;
  void OnOutputSurfaceDestroyed() override;
69

70
  // SkyEngine implementation:
A
Adam Barth 已提交
71
  void OnViewportMetricsChanged(ViewportMetricsPtr metrics) override;
72
  void OnInputEvent(InputEventPtr event) override;
73
  void OnPointerPacket(pointer::PointerPacketPtr packet) override;
74 75 76 77

  void RunFromNetwork(const mojo::String& url) override;
  void RunFromFile(const mojo::String& main,
                   const mojo::String& package_root) override;
78
  void RunFromSnapshot(const mojo::String& path) override;
79
  void RunFromBundle(const mojo::String& path) override;
A
Adam Barth 已提交
80

81 82 83
  void OnActivityPaused() override;
  void OnActivityResumed() override;

A
Adam Barth 已提交
84
  // SkyViewClient methods:
85
  void ScheduleFrame() override;
86
  void DidCreateIsolate(Dart_Isolate isolate) override;
A
Adam Barth 已提交
87

88 89 90 91 92 93 94
  // Services methods:
  mojo::NavigatorHost* NavigatorHost() override;

  // NavigatorHost methods:
  void RequestNavigate(mojo::Target target,
                       mojo::URLRequestPtr request) override;
  void DidNavigateLocally(const mojo::String& url) override;
B
Benjamin Lerman 已提交
95
  void RequestNavigateHistory(int32_t delta) override;
A
Adam Barth 已提交
96

97 98 99
  void RunFromLibrary(const std::string& name);
  void RunFromSnapshotStream(const std::string& name,
                             mojo::ScopedDataPipeConsumerHandle snapshot);
100

101 102 103
  void StopAnimator();
  void StartAnimatorIfPossible();

104
  Config config_;
A
Adam Barth 已提交
105
  scoped_ptr<Animator> animator_;
106

107
  mojo::NetworkServicePtr network_service_;
108
  mojo::asset_bundle::AssetBundlePtr root_bundle_;
109
  scoped_ptr<blink::DartLibraryProvider> dart_library_provider_;
110 111
  std::unique_ptr<blink::SkyView> sky_view_;

A
Adam Barth 已提交
112
  gfx::Size physical_size_;
A
Adam Barth 已提交
113
  blink::SkyDisplayMetrics display_metrics_;
114
  mojo::Binding<SkyEngine> binding_;
115

116 117 118 119
  // TODO(eseidel): This should move into an AnimatorStateMachine.
  bool activity_running_;
  bool have_surface_;

120 121 122 123 124 125 126 127 128
  base::WeakPtrFactory<Engine> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(Engine);
};

}  // namespace shell
}  // namespace sky

#endif  // SKY_SHELL_UI_ENGINE_H_