Commit 82471404 authored by Ian Vollick's avatar Ian Vollick Committed by Commit Bot

[ar] Plumb ARCore and GVR factories via unique_ptr

Per review comments on crrev.com/c/1005627, we should plumb a unique_ptr
rather than raw pointers to make the transfer of ownership more
explicit.

Bug: None
Change-Id: I8163362778e3e03287e6742dfc254fe38aec815f
Reviewed-on: https://chromium-review.googlesource.com/1038061
Commit-Queue: Ian Vollick <vollick@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556090}
parent 939bc11c
...@@ -351,12 +351,12 @@ static void JNI_VrShellDelegate_OnLibraryAvailable( ...@@ -351,12 +351,12 @@ static void JNI_VrShellDelegate_OnLibraryAvailable(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jclass>& clazz) { const JavaParamRef<jclass>& clazz) {
device::GvrDelegateProviderFactory::Install( device::GvrDelegateProviderFactory::Install(
new VrShellDelegateProviderFactory); std::make_unique<VrShellDelegateProviderFactory>());
// TODO(https://crbug.com/837965): Move this to an ARCore-specific location // TODO(https://crbug.com/837965): Move this to an ARCore-specific location
// with similar timing (occurs before VRDeviceManager is initialized). // with similar timing (occurs before VRDeviceManager is initialized).
device::ARCoreDeviceProviderFactory::Install( device::ARCoreDeviceProviderFactory::Install(
new ARCoreDeviceProviderFactoryImpl); std::make_unique<ARCoreDeviceProviderFactoryImpl>());
} }
static void JNI_VrShellDelegate_RegisterVrAssetsComponent( static void JNI_VrShellDelegate_RegisterVrAssetsComponent(
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "device/vr/android/arcore/arcore_device_provider_factory.h" #include "device/vr/android/arcore/arcore_device_provider_factory.h"
#include "base/logging.h"
#include "device/vr/vr_device_provider.h" #include "device/vr/vr_device_provider.h"
namespace device { namespace device {
...@@ -21,11 +22,12 @@ ARCoreDeviceProviderFactory::Create() { ...@@ -21,11 +22,12 @@ ARCoreDeviceProviderFactory::Create() {
} }
// static // static
void ARCoreDeviceProviderFactory::Install(ARCoreDeviceProviderFactory* f) { void ARCoreDeviceProviderFactory::Install(
if (g_arcore_device_provider_factory == f) std::unique_ptr<ARCoreDeviceProviderFactory> factory) {
return; DCHECK_NE(g_arcore_device_provider_factory, factory.get());
if (g_arcore_device_provider_factory)
delete g_arcore_device_provider_factory; delete g_arcore_device_provider_factory;
g_arcore_device_provider_factory = f; g_arcore_device_provider_factory = factory.release();
} }
} // namespace device } // namespace device
...@@ -16,11 +16,12 @@ class VRDeviceProvider; ...@@ -16,11 +16,12 @@ class VRDeviceProvider;
class DEVICE_VR_EXPORT ARCoreDeviceProviderFactory { class DEVICE_VR_EXPORT ARCoreDeviceProviderFactory {
public: public:
static std::unique_ptr<device::VRDeviceProvider> Create(); static std::unique_ptr<device::VRDeviceProvider> Create();
static void Install(ARCoreDeviceProviderFactory* factory); static void Install(std::unique_ptr<ARCoreDeviceProviderFactory> factory);
virtual ~ARCoreDeviceProviderFactory() = default;
protected: protected:
ARCoreDeviceProviderFactory() = default; ARCoreDeviceProviderFactory() = default;
virtual ~ARCoreDeviceProviderFactory() = default;
virtual std::unique_ptr<device::VRDeviceProvider> CreateDeviceProvider() = 0; virtual std::unique_ptr<device::VRDeviceProvider> CreateDeviceProvider() = 0;
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "device/vr/android/gvr/gvr_delegate_provider_factory.h" #include "device/vr/android/gvr/gvr_delegate_provider_factory.h"
#include "base/logging.h"
namespace device { namespace device {
namespace { namespace {
...@@ -18,11 +20,12 @@ GvrDelegateProvider* GvrDelegateProviderFactory::Create() { ...@@ -18,11 +20,12 @@ GvrDelegateProvider* GvrDelegateProviderFactory::Create() {
} }
// static // static
void GvrDelegateProviderFactory::Install(GvrDelegateProviderFactory* f) { void GvrDelegateProviderFactory::Install(
if (g_gvr_delegate_provider_factory == f) std::unique_ptr<GvrDelegateProviderFactory> factory) {
return; DCHECK_NE(g_gvr_delegate_provider_factory, factory.get());
if (g_gvr_delegate_provider_factory)
delete g_gvr_delegate_provider_factory; delete g_gvr_delegate_provider_factory;
g_gvr_delegate_provider_factory = f; g_gvr_delegate_provider_factory = factory.release();
} }
} // namespace device } // namespace device
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_ #ifndef DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_
#define DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_ #define DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_
#include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "device/vr/vr_export.h" #include "device/vr/vr_export.h"
...@@ -16,11 +18,12 @@ class GvrDelegateProvider; ...@@ -16,11 +18,12 @@ class GvrDelegateProvider;
class DEVICE_VR_EXPORT GvrDelegateProviderFactory { class DEVICE_VR_EXPORT GvrDelegateProviderFactory {
public: public:
static GvrDelegateProvider* Create(); static GvrDelegateProvider* Create();
static void Install(GvrDelegateProviderFactory* factory); static void Install(std::unique_ptr<GvrDelegateProviderFactory> factory);
virtual ~GvrDelegateProviderFactory() = default;
protected: protected:
GvrDelegateProviderFactory() = default; GvrDelegateProviderFactory() = default;
virtual ~GvrDelegateProviderFactory() = default;
virtual GvrDelegateProvider* CreateGvrDelegateProvider() = 0; virtual GvrDelegateProvider* CreateGvrDelegateProvider() = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment