提交 11f48297 编写于 作者: A Adam Barth

Stocks app shouldn't show black when resuming from recents list

Previously, we weren't scheduling a visual update when our surface was created,
so we'd just continue to show black until the author requested a new animation
frame. After this CL, we schedule a visual update as soon as our surface is
created.

As part of this change, I've removed knowledge of the GPU delegate from
PlatformView. Now, all the calls from PlatformView to the GPU system bounce
through the UI delegate, which serializes the commands with other commands from
the UI engine to the GPU rasterizer.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/974483004
上级 76f01e9f
......@@ -59,16 +59,16 @@ void PlatformView::SurfaceCreated(JNIEnv* env, jobject obj, jobject jsurface) {
base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env);
window_ = ANativeWindow_fromSurface(env, jsurface);
}
config_.gpu_task_runner->PostTask(
FROM_HERE, base::Bind(&GPUDelegate::OnAcceleratedWidgetAvailable,
config_.gpu_delegate, window_));
config_.ui_task_runner->PostTask(
FROM_HERE, base::Bind(&UIDelegate::OnAcceleratedWidgetAvailable,
config_.ui_delegate, window_));
}
void PlatformView::SurfaceDestroyed(JNIEnv* env, jobject obj) {
DCHECK(window_);
config_.gpu_task_runner->PostTask(
config_.ui_task_runner->PostTask(
FROM_HERE,
base::Bind(&GPUDelegate::OnOutputSurfaceDestroyed, config_.gpu_delegate));
base::Bind(&UIDelegate::OnOutputSurfaceDestroyed, config_.ui_delegate));
ReleaseWindow();
}
......
......@@ -10,7 +10,6 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h"
#include "sky/shell/gpu_delegate.h"
#include "sky/shell/ui_delegate.h"
struct ANativeWindow;
......@@ -21,9 +20,6 @@ namespace shell {
class PlatformView {
public:
struct Config {
base::WeakPtr<GPUDelegate> gpu_delegate;
scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner;
base::WeakPtr<UIDelegate> ui_delegate;
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner;
};
......
......@@ -75,8 +75,6 @@ void Shell::InitUI(const base::Thread::Options& options) {
void Shell::InitView() {
PlatformView::Config config;
config.gpu_task_runner = gpu_thread_->message_loop()->task_runner();
config.gpu_delegate = rasterizer_->GetWeakPtr();
config.ui_task_runner = ui_thread_->message_loop()->task_runner();
config.ui_delegate = engine_->GetWeakPtr();
view_.reset(new PlatformView(config));
......
......@@ -33,7 +33,7 @@ void ConfigureSettings(blink::WebSettings* settings) {
}
Engine::Engine(const Config& config)
: java_task_runner_(config.java_task_runner),
: config_(config),
animator_(new Animator(config, this)),
web_view_(nullptr),
device_pixel_ratio_(1.0f),
......@@ -52,10 +52,11 @@ base::WeakPtr<Engine> Engine::GetWeakPtr() {
mojo::ServiceProviderPtr Engine::CreateServiceProvider() {
mojo::MessagePipe pipe;
java_task_runner_->PostTask(FROM_HERE, base::Bind(
CreateJavaServiceProvider,
base::Passed(mojo::MakeRequest<mojo::ServiceProvider>(
pipe.handle1.Pass()))));
config_.java_task_runner->PostTask(
FROM_HERE,
base::Bind(CreateJavaServiceProvider,
base::Passed(mojo::MakeRequest<mojo::ServiceProvider>(
pipe.handle1.Pass()))));
return mojo::MakeProxy<mojo::ServiceProvider>(pipe.handle0.Pass());
}
......@@ -94,6 +95,20 @@ void Engine::ConnectToViewportObserver(
viewport_observer_binding_.Bind(request.Pass());
}
void Engine::OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) {
config_.gpu_task_runner->PostTask(
FROM_HERE, base::Bind(&GPUDelegate::OnAcceleratedWidgetAvailable,
config_.gpu_delegate, widget));
if (web_view_)
scheduleVisualUpdate();
}
void Engine::OnOutputSurfaceDestroyed() {
config_.gpu_task_runner->PostTask(
FROM_HERE,
base::Bind(&GPUDelegate::OnOutputSurfaceDestroyed, config_.gpu_delegate));
}
void Engine::OnViewportMetricsChanged(int width, int height,
float device_pixel_ratio) {
physical_size_.SetSize(width, height);
......
......@@ -55,6 +55,8 @@ class Engine : public UIDelegate,
// UIDelegate methods:
void ConnectToViewportObserver(
mojo::InterfaceRequest<ViewportObserver> request) override;
void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override;
void OnOutputSurfaceDestroyed() override;
// ViewportObserver:
void OnViewportMetricsChanged(int width, int height,
......@@ -83,7 +85,7 @@ class Engine : public UIDelegate,
mojo::ServiceProviderPtr CreateServiceProvider();
void UpdateWebViewSize();
scoped_refptr<base::SingleThreadTaskRunner> java_task_runner_;
Config config_;
mojo::ServiceProviderPtr service_provider_;
scoped_ptr<PlatformImpl> platform_impl_;
scoped_ptr<Animator> animator_;
......
......@@ -8,6 +8,7 @@
#include "mojo/public/cpp/bindings/interface_request.h"
#include "sky/services/viewport/viewport_observer.mojom.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/native_widget_types.h"
namespace sky {
namespace shell {
......@@ -16,6 +17,8 @@ class UIDelegate {
public:
virtual void ConnectToViewportObserver(
mojo::InterfaceRequest<ViewportObserver> request) = 0;
virtual void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) = 0;
virtual void OnOutputSurfaceDestroyed() = 0;
protected:
virtual ~UIDelegate();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册