Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Unified Diff: content/browser/renderer_host/context_provider_factory_impl_android.h

Issue 2297273004: Revert "Revert of content: Fix Context creation logic in ContextProviderFactoryImpl. (patchset #10 … (Closed)
Patch Set: remove gpu process initialization failure Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/context_provider_factory_impl_android.h
diff --git a/content/browser/renderer_host/context_provider_factory_impl_android.h b/content/browser/renderer_host/context_provider_factory_impl_android.h
index 3a820fbcb3a2fc0fb6b1abc9796b9d8ee3316dcd..c0fe933a6ba41c9c7cef080fb0282a69c426a167 100644
--- a/content/browser/renderer_host/context_provider_factory_impl_android.h
+++ b/content/browser/renderer_host/context_provider_factory_impl_android.h
@@ -17,17 +17,13 @@
#include "gpu/ipc/common/surface_handle.h"
#include "ui/android/context_provider_factory.h"
-namespace base {
-template <typename T>
-struct DefaultSingletonTraits;
-}
-
namespace cc {
class VulkanInProcessContextProvider;
}
namespace gpu {
class GpuChannelHost;
+class GpuChannelEstablishFactory;
}
namespace content {
@@ -36,13 +32,19 @@ class ContextProviderCommandBuffer;
class CONTENT_EXPORT ContextProviderFactoryImpl
: public ui::ContextProviderFactory {
public:
+ // The factory must outlive the ContextProviderFactoryImpl instance, which
+ // will be destroyed when terminate is called.
+ static void Initialize(gpu::GpuChannelEstablishFactory* gpu_channel_factory);
+
+ static void Terminate();
+
static ContextProviderFactoryImpl* GetInstance();
~ContextProviderFactoryImpl() override;
// The callback may be triggered synchronously, if the Gpu Channel is already
- // initialized. In case the surface_handle is invalidated before the context
- // can be created, the request is dropped and the callback will *not* run.
+ // initialized. In case the context creation fails, a null context is passed
+ // with the failure reason.
void CreateDisplayContextProvider(
gpu::SurfaceHandle surface_handle,
gpu::SharedMemoryLimits shared_memory_limits,
@@ -68,7 +70,8 @@ class CONTENT_EXPORT ContextProviderFactoryImpl
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
private:
- friend struct base::DefaultSingletonTraits<ContextProviderFactoryImpl>;
+ ContextProviderFactoryImpl(
+ gpu::GpuChannelEstablishFactory* gpu_channel_factory);
void CreateContextProviderInternal(
command_buffer_metrics::ContextType context_type,
@@ -95,14 +98,16 @@ class CONTENT_EXPORT ContextProviderFactoryImpl
ContextProviderCallback result_callback;
};
- ContextProviderFactoryImpl();
-
// Will return nullptr if the Gpu channel has not been established.
- gpu::GpuChannelHost* EnsureGpuChannelEstablished();
+ void EstablishGpuChannel();
void OnGpuChannelEstablished(scoped_refptr<gpu::GpuChannelHost> gpu_channel);
void OnGpuChannelTimeout();
- void HandlePendingRequests();
+ void HandlePendingRequests(
+ scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+ ContextCreationResult result);
+
+ gpu::GpuChannelEstablishFactory* gpu_channel_factory_;
std::list<ContextProvidersRequest> context_provider_requests_;
@@ -112,6 +117,8 @@ class CONTENT_EXPORT ContextProviderFactoryImpl
bool in_handle_pending_requests_;
+ bool in_shutdown_;
+
base::OneShotTimer establish_gpu_channel_timeout_;
std::unique_ptr<cc::SurfaceManager> surface_manager_;

Powered by Google App Engine
This is Rietveld 408576698