Index: services/ui/service.h |
diff --git a/services/ui/service.h b/services/ui/service.h |
index 4d035f9c94a2d269df23c1d455a7e5f68f796044..9168aa69788acbc896deb1d2cc8bf8f83e3a2537 100644 |
--- a/services/ui/service.h |
+++ b/services/ui/service.h |
@@ -53,6 +53,7 @@ class Identity; |
namespace ui { |
+class ImageCursors; |
class InputDeviceController; |
class PlatformEventSource; |
@@ -63,7 +64,15 @@ class WindowServer; |
class Service : public service_manager::Service, |
public ws::WindowServerDelegate { |
public: |
- Service(); |
+ // |resource_runner| is the task runner for the thread which can be used to |
+ // load resources. Used when UI Service run inside a Window Manager's |
+ // process (and so the resources need to be loaded on the WM's thread). |
+ // When UI Service is run in a separate process, |resource_runner| |
+ // should be null, and resources are loaded on the UI Service's thread. |
+ // |image_cursors_weak_ptr| is also only used when the UI service runs |
+ // in-process. It can only be dereferenced on |resource_runner|. |
+ Service(scoped_refptr<base::SingleThreadTaskRunner> resource_runner, |
sky
2017/06/27 19:58:56
optional: Create a structure named InProcessConfig
mfomitchev
2017/07/11 21:47:00
Done.
|
+ base::WeakPtr<ui::ImageCursors> image_cursors_weak_ptr); |
~Service() override; |
private: |
@@ -74,6 +83,8 @@ class Service : public service_manager::Service, |
using UserIdToUserState = std::map<ws::UserId, std::unique_ptr<UserState>>; |
+ bool in_process() { return in_process_; } |
sky
2017/06/27 19:58:56
bool in_process() const
optional: prefix member an
mfomitchev
2017/07/11 21:46:59
Done.
|
+ |
// Attempts to initialize the resource bundle. Returns true if successful, |
// otherwise false if resources cannot be loaded. |
bool InitializeResources(service_manager::Connector* connector); |
@@ -99,6 +110,8 @@ class Service : public service_manager::Service, |
bool IsTestConfig() const override; |
void OnWillCreateTreeForWindowManager( |
bool automatically_create_display_roots) override; |
+ scoped_refptr<base::SingleThreadTaskRunner>& GetResourceRunner() override; |
+ base::WeakPtr<ui::ImageCursors> GetImageCursorsWeakPtr() override; |
void BindAccessibilityManagerRequest( |
const service_manager::BindSourceInfo& source_info, |
@@ -160,6 +173,22 @@ class Service : public service_manager::Service, |
// and must outlive |registry_|. |
InputDeviceServer input_device_server_; |
+ // True if the UI Service runs inside WM's process, false if it runs inside |
+ // its own process. |
+ bool in_process_; |
+ |
+ // Can be used to access resources. Will be null until the service is started |
sky
2017/06/27 19:58:56
Please group in-process related state into a struc
mfomitchev
2017/07/11 21:47:00
Created ThreadedImageCursorsFactory(Impl). I think
|
+ // if the UI Service doesn't run in WM's process. |
+ scoped_refptr<base::SingleThreadTaskRunner> resource_runner_; |
+ |
+ // Used when UI Service runs in-process, and can only be de-referenced on |
+ // |resource_runner_|. When UI Service doesn't run in-process, this points to |
+ // |image_cursors_| (and should be de-referenced on UI Serivice's thread). |
+ base::WeakPtr<ui::ImageCursors> image_cursors_weak_ptr_; |
+ |
+ // Used when UI Service doesn't run in-process. |
+ std::unique_ptr<ui::ImageCursors> image_cursors_; |
+ |
bool test_config_; |
#if defined(USE_OZONE) |
std::unique_ptr<gfx::ClientNativePixmapFactory> client_native_pixmap_factory_; |