OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/browser_main_loop.h" | 5 #include "content/browser/browser_main_loop.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
72 #if defined(USE_AURA) | 72 #if defined(USE_AURA) |
73 #include "content/public/browser/context_factory.h" | 73 #include "content/public/browser/context_factory.h" |
74 #include "ui/aura/env.h" | 74 #include "ui/aura/env.h" |
75 #endif | 75 #endif |
76 | 76 |
77 #if !defined(OS_IOS) | 77 #if !defined(OS_IOS) |
78 #include "content/browser/renderer_host/render_process_host_impl.h" | 78 #include "content/browser/renderer_host/render_process_host_impl.h" |
79 #endif | 79 #endif |
80 | 80 |
81 #if defined(OS_ANDROID) | 81 #if defined(OS_ANDROID) |
82 #include <android/native_window.h> | |
83 #include <android/native_window_jni.h> | |
84 | |
82 #include "base/android/jni_android.h" | 85 #include "base/android/jni_android.h" |
86 #include "base/containers/scoped_ptr_hash_map.h" | |
87 #include "base/synchronization/lock.h" | |
83 #include "content/browser/android/browser_startup_controller.h" | 88 #include "content/browser/android/browser_startup_controller.h" |
84 #include "content/browser/android/browser_surface_texture_manager.h" | 89 #include "content/browser/android/browser_surface_texture_manager.h" |
85 #include "content/browser/android/tracing_controller_android.h" | 90 #include "content/browser/android/tracing_controller_android.h" |
86 #include "content/browser/screen_orientation/screen_orientation_delegate_android .h" | 91 #include "content/browser/screen_orientation/screen_orientation_delegate_android .h" |
92 #include "content/common/android/surface_texture_manager.h" | |
87 #include "content/public/browser/screen_orientation_provider.h" | 93 #include "content/public/browser/screen_orientation_provider.h" |
94 #include "ui/gl/android/scoped_java_surface.h" | |
95 #include "ui/gl/android/surface_texture.h" | |
88 #include "ui/gl/gl_surface.h" | 96 #include "ui/gl/gl_surface.h" |
89 #endif | 97 #endif |
90 | 98 |
91 #if defined(OS_MACOSX) && !defined(OS_IOS) | 99 #if defined(OS_MACOSX) && !defined(OS_IOS) |
92 #include "base/mac/memory_pressure_monitor_mac.h" | 100 #include "base/mac/memory_pressure_monitor_mac.h" |
93 #include "content/browser/bootstrap_sandbox_mac.h" | 101 #include "content/browser/bootstrap_sandbox_mac.h" |
94 #include "content/browser/cocoa/system_hotkey_helper_mac.h" | 102 #include "content/browser/cocoa/system_hotkey_helper_mac.h" |
95 #include "content/browser/compositor/browser_compositor_view_mac.h" | 103 #include "content/browser/compositor/browser_compositor_view_mac.h" |
96 #include "content/browser/theme_helper_mac.h" | 104 #include "content/browser/theme_helper_mac.h" |
97 #endif | 105 #endif |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 #endif | 150 #endif |
143 | 151 |
144 // One of the linux specific headers defines this as a macro. | 152 // One of the linux specific headers defines this as a macro. |
145 #ifdef DestroyAll | 153 #ifdef DestroyAll |
146 #undef DestroyAll | 154 #undef DestroyAll |
147 #endif | 155 #endif |
148 | 156 |
149 namespace content { | 157 namespace content { |
150 namespace { | 158 namespace { |
151 | 159 |
160 #if defined(OS_ANDROID) | |
Daniele Castagna
2015/05/06 18:39:41
Could this class be somewhere else?
reveman
2015/05/06 20:37:47
I'm Ok with leaving it here or moving it somewhere
| |
161 class InProcessSurfaceTextureManager : public SurfaceTextureManager { | |
162 public: | |
163 InProcessSurfaceTextureManager() {} | |
164 | |
165 // Overridden from SurfaceTextureManager: | |
166 void RegisterSurfaceTexture(int surface_texture_id, | |
167 int client_id, | |
168 gfx::SurfaceTexture* surface_texture) override { | |
169 base::AutoLock lock(lock_); | |
170 DCHECK(surfaces_.find(surface_texture_id) == surfaces_.end()); | |
171 surfaces_.set(surface_texture_id, | |
172 make_scoped_ptr(new gfx::ScopedJavaSurface(surface_texture))); | |
173 } | |
174 void UnregisterSurfaceTexture(int surface_texture_id, | |
175 int client_id) override { | |
176 base::AutoLock lock(lock_); | |
177 DCHECK(surfaces_.find(surface_texture_id) != surfaces_.end()); | |
178 surfaces_.erase(surface_texture_id); | |
179 } | |
180 gfx::AcceleratedWidget AcquireNativeWidgetForSurfaceTexture( | |
181 int surface_texture_id) override { | |
182 base::AutoLock lock(lock_); | |
183 DCHECK(surfaces_.find(surface_texture_id) != surfaces_.end()); | |
184 JNIEnv* env = base::android::AttachCurrentThread(); | |
185 return ANativeWindow_fromSurface( | |
186 env, surfaces_.get(surface_texture_id)->j_surface().obj()); | |
187 } | |
188 | |
189 private: | |
190 typedef base::ScopedPtrHashMap<int, scoped_ptr<gfx::ScopedJavaSurface>> | |
Daniele Castagna
2015/05/06 18:39:41
Is there something like a ConcurrentMap so you can
reveman
2015/05/06 20:37:47
Not that I know.
| |
191 SurfaceMap; | |
192 SurfaceMap surfaces_; | |
193 base::Lock lock_; | |
194 | |
195 DISALLOW_COPY_AND_ASSIGN(InProcessSurfaceTextureManager); | |
196 }; | |
197 | |
198 base::LazyInstance<InProcessSurfaceTextureManager> | |
199 g_in_process_surface_texture_manager = LAZY_INSTANCE_INITIALIZER; | |
200 #endif | |
201 | |
152 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) | 202 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) |
153 void SetupSandbox(const base::CommandLine& parsed_command_line) { | 203 void SetupSandbox(const base::CommandLine& parsed_command_line) { |
154 TRACE_EVENT0("startup", "SetupSandbox"); | 204 TRACE_EVENT0("startup", "SetupSandbox"); |
155 base::FilePath sandbox_binary; | 205 base::FilePath sandbox_binary; |
156 | 206 |
157 scoped_ptr<sandbox::SetuidSandboxHost> setuid_sandbox_host( | 207 scoped_ptr<sandbox::SetuidSandboxHost> setuid_sandbox_host( |
158 sandbox::SetuidSandboxHost::Create()); | 208 sandbox::SetuidSandboxHost::Create()); |
159 | 209 |
160 const bool want_setuid_sandbox = | 210 const bool want_setuid_sandbox = |
161 !parsed_command_line.HasSwitch(switches::kNoSandbox) && | 211 !parsed_command_line.HasSwitch(switches::kNoSandbox) && |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
557 // MessagePumpForUI::Start() as it will crash the browser. | 607 // MessagePumpForUI::Start() as it will crash the browser. |
558 if (is_tracing_startup_) { | 608 if (is_tracing_startup_) { |
559 TRACE_EVENT0("startup", "BrowserMainLoop::InitStartupTracing"); | 609 TRACE_EVENT0("startup", "BrowserMainLoop::InitStartupTracing"); |
560 InitStartupTracing(parsed_command_line_); | 610 InitStartupTracing(parsed_command_line_); |
561 } | 611 } |
562 #endif // !defined(OS_IOS) | 612 #endif // !defined(OS_IOS) |
563 | 613 |
564 #if defined(OS_ANDROID) | 614 #if defined(OS_ANDROID) |
565 { | 615 { |
566 TRACE_EVENT0("startup", "BrowserMainLoop::Subsystem:SurfaceTextureManager"); | 616 TRACE_EVENT0("startup", "BrowserMainLoop::Subsystem:SurfaceTextureManager"); |
567 SurfaceTextureManager::InitInstance(new BrowserSurfaceTextureManager); | 617 browser_surface_texture_manager_.reset(new BrowserSurfaceTextureManager); |
618 } | |
619 | |
620 if (parsed_command_line_.HasSwitch(switches::kSingleProcess)) { | |
Daniele Castagna
2015/05/06 18:39:41
This shouldn't be true on any real platform, right
reveman
2015/05/06 20:37:47
It's always the true on Android Webview and it wil
| |
621 SurfaceTextureManager::InitInstance( | |
622 g_in_process_surface_texture_manager.Pointer()); | |
623 } else { | |
624 SurfaceTextureManager::InitInstance(browser_surface_texture_manager_.get()); | |
568 } | 625 } |
569 | 626 |
570 if (!parsed_command_line_.HasSwitch( | 627 if (!parsed_command_line_.HasSwitch( |
571 switches::kDisableScreenOrientationLock)) { | 628 switches::kDisableScreenOrientationLock)) { |
572 TRACE_EVENT0("startup", | 629 TRACE_EVENT0("startup", |
573 "BrowserMainLoop::Subsystem:ScreenOrientationProvider"); | 630 "BrowserMainLoop::Subsystem:ScreenOrientationProvider"); |
574 screen_orientation_delegate_.reset( | 631 screen_orientation_delegate_.reset( |
575 new ScreenOrientationDelegateAndroid()); | 632 new ScreenOrientationDelegateAndroid()); |
576 ScreenOrientationProvider::SetDelegate(screen_orientation_delegate_.get()); | 633 ScreenOrientationProvider::SetDelegate(screen_orientation_delegate_.get()); |
577 } | 634 } |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1310 | 1367 |
1311 void BrowserMainLoop::EndStartupTracing() { | 1368 void BrowserMainLoop::EndStartupTracing() { |
1312 is_tracing_startup_ = false; | 1369 is_tracing_startup_ = false; |
1313 TracingController::GetInstance()->DisableRecording( | 1370 TracingController::GetInstance()->DisableRecording( |
1314 TracingController::CreateFileSink( | 1371 TracingController::CreateFileSink( |
1315 startup_trace_file_, | 1372 startup_trace_file_, |
1316 base::Bind(OnStoppedStartupTracing, startup_trace_file_))); | 1373 base::Bind(OnStoppedStartupTracing, startup_trace_file_))); |
1317 } | 1374 } |
1318 | 1375 |
1319 } // namespace content | 1376 } // namespace content |
OLD | NEW |