blob: b1bad8570d6d794e348bc83220dc3ad7cf21a811 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
// 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 COMPONENTS_HTML_VIEWER_SETUP_H_
#define COMPONENTS_HTML_VIEWER_SETUP_H_
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/threading/thread.h"
#include "components/html_viewer/discardable_memory_allocator.h"
#include "components/resource_provider/public/cpp/resource_loader.h"
#include "ui/gfx/geometry/size.h"
namespace mojo {
class ApplicationImpl;
class Shell;
}
namespace scheduler {
class RendererScheduler;
}
namespace html_viewer {
class BlinkPlatformImpl;
class UISetup;
class WebMediaPlayerFactory;
// Setup encapsulates the necessary state needed by HTMLViewer. Some objects
// are created immediately in the constructor, otherwise not until
// InitIfNecessary() is invoked.
// Setup can be initialized in two distinct ways:
// . headless: this is determined by the command line, but can be forced by way
// of InitHeadless().
// . with a ui: this is done via InitIfNecessary().
class Setup {
public:
explicit Setup(mojo::ApplicationImpl* app);
~Setup();
// Use to explicitly create headless regardless of command line switches.
// This must be invoked before InitIfNecessary().
void InitHeadless();
// Inits with the specified screen size and device pixel ratio.
// NOTE: we wait to complete setup until the device pixel ratio is available
// as ResourceBundle uses the device pixel ratio during initialization.
void InitIfNecessary(const gfx::Size& screen_size_in_pixels,
float device_pixel_ratio);
bool is_headless() const { return is_headless_; }
bool did_init() const { return did_init_; }
const gfx::Size& screen_size_in_pixels() const {
return screen_size_in_pixels_;
}
float device_pixel_ratio() const { return device_pixel_ratio_; }
scoped_refptr<base::MessageLoopProxy> compositor_thread() {
return compositor_thread_.message_loop_proxy();
}
WebMediaPlayerFactory* web_media_player_factory() {
return web_media_player_factory_.get();
}
private:
mojo::ApplicationImpl* app_;
resource_provider::ResourceLoader resource_loader_;
bool is_headless_;
// True once we've completed init.
bool did_init_;
float device_pixel_ratio_;
gfx::Size screen_size_in_pixels_;
scoped_ptr<UISetup> ui_setup_;
// Skia requires that we have one of these. Unlike the one used in chrome,
// this doesn't use purgable shared memory. Instead, it tries to free the
// oldest unlocked chunks on allocation.
//
// TODO(erg): In the long run, delete this allocator and get the real shared
// memory based purging allocator working here.
DiscardableMemoryAllocator discardable_memory_allocator_;
scoped_ptr<scheduler::RendererScheduler> renderer_scheduler_;
scoped_ptr<BlinkPlatformImpl> blink_platform_;
base::Thread compositor_thread_;
scoped_ptr<WebMediaPlayerFactory> web_media_player_factory_;
DISALLOW_COPY_AND_ASSIGN(Setup);
};
} // namespace html_viewer
#endif // COMPONENTS_HTML_VIEWER_SETUP_H_
|