mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Previously we were using the cull rect of the SkPicture to size the GPU buffer, but Skia is too smart and shrinkwraps the cull rect, which meant we weren't sizing the GPU buffer to the right size. Fixes #814
128 lines
4.0 KiB
C++
128 lines
4.0 KiB
C++
// 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"
|
|
#include "base/single_thread_task_runner.h"
|
|
#include "mojo/public/cpp/bindings/binding.h"
|
|
#include "mojo/public/cpp/system/core.h"
|
|
#include "mojo/public/cpp/system/data_pipe.h"
|
|
#include "mojo/public/interfaces/application/service_provider.mojom.h"
|
|
#include "mojo/services/asset_bundle/public/interfaces/asset_bundle.mojom.h"
|
|
#include "mojo/services/navigation/public/interfaces/navigation.mojom.h"
|
|
#include "mojo/services/network/public/interfaces/network_service.mojom.h"
|
|
#include "skia/ext/refptr.h"
|
|
#include "sky/engine/public/platform/ServiceProvider.h"
|
|
#include "sky/engine/public/sky/sky_view.h"
|
|
#include "sky/engine/public/sky/sky_view_client.h"
|
|
#include "sky/shell/gpu_delegate.h"
|
|
#include "sky/shell/service_provider.h"
|
|
#include "sky/shell/ui_delegate.h"
|
|
#include "third_party/skia/include/core/SkPicture.h"
|
|
#include "ui/gfx/geometry/size.h"
|
|
|
|
namespace sky {
|
|
class PlatformImpl;
|
|
namespace shell {
|
|
class Animator;
|
|
|
|
class Engine : public UIDelegate,
|
|
public SkyEngine,
|
|
public blink::ServiceProvider,
|
|
public mojo::NavigatorHost,
|
|
public blink::SkyViewClient {
|
|
public:
|
|
struct Config {
|
|
Config();
|
|
~Config();
|
|
|
|
ServiceProviderContext* service_provider_context;
|
|
|
|
base::WeakPtr<GPUDelegate> gpu_delegate;
|
|
scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner;
|
|
};
|
|
|
|
explicit Engine(const Config& config);
|
|
~Engine() override;
|
|
|
|
base::WeakPtr<Engine> GetWeakPtr();
|
|
|
|
static void Init();
|
|
|
|
void BeginFrame(base::TimeTicks frame_time);
|
|
PassRefPtr<SkPicture> Paint();
|
|
const gfx::Size& physical_size() { return physical_size_; }
|
|
|
|
void StartDartTracing();
|
|
void StopDartTracing(mojo::ScopedDataPipeProducerHandle producer);
|
|
|
|
private:
|
|
// UIDelegate implementation:
|
|
void ConnectToEngine(mojo::InterfaceRequest<SkyEngine> request) override;
|
|
void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override;
|
|
void OnOutputSurfaceDestroyed() override;
|
|
|
|
// SkyEngine implementation:
|
|
void OnViewportMetricsChanged(ViewportMetricsPtr metrics) override;
|
|
void OnInputEvent(InputEventPtr event) override;
|
|
|
|
void RunFromNetwork(const mojo::String& url) override;
|
|
void RunFromFile(const mojo::String& main,
|
|
const mojo::String& package_root) override;
|
|
void RunFromSnapshot(const mojo::String& path) override;
|
|
void RunFromBundle(const mojo::String& path) override;
|
|
|
|
void OnActivityPaused() override;
|
|
void OnActivityResumed() override;
|
|
|
|
// SkyViewClient methods:
|
|
void ScheduleFrame() override;
|
|
void DidCreateIsolate(Dart_Isolate isolate) override;
|
|
|
|
// Services methods:
|
|
mojo::NavigatorHost* NavigatorHost() override;
|
|
|
|
// NavigatorHost methods:
|
|
void RequestNavigate(mojo::Target target,
|
|
mojo::URLRequestPtr request) override;
|
|
void DidNavigateLocally(const mojo::String& url) override;
|
|
void RequestNavigateHistory(int32_t delta) override;
|
|
|
|
void RunFromLibrary(const std::string& name);
|
|
void RunFromSnapshotStream(const std::string& name,
|
|
mojo::ScopedDataPipeConsumerHandle snapshot);
|
|
|
|
void StopAnimator();
|
|
void StartAnimatorIfPossible();
|
|
|
|
Config config_;
|
|
scoped_ptr<Animator> animator_;
|
|
|
|
mojo::NetworkServicePtr network_service_;
|
|
mojo::asset_bundle::AssetBundlePtr root_bundle_;
|
|
scoped_ptr<blink::DartLibraryProvider> dart_library_provider_;
|
|
std::unique_ptr<blink::SkyView> sky_view_;
|
|
|
|
gfx::Size physical_size_;
|
|
blink::SkyDisplayMetrics display_metrics_;
|
|
mojo::Binding<SkyEngine> binding_;
|
|
|
|
// TODO(eseidel): This should move into an AnimatorStateMachine.
|
|
bool activity_running_;
|
|
bool have_surface_;
|
|
|
|
base::WeakPtrFactory<Engine> weak_factory_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(Engine);
|
|
};
|
|
|
|
} // namespace shell
|
|
} // namespace sky
|
|
|
|
#endif // SKY_SHELL_UI_ENGINE_H_
|