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(
JNIEnv* env,
const JavaParamRef<jclass>& clazz) {
device::GvrDelegateProviderFactory::Install(
new VrShellDelegateProviderFactory);
std::make_unique<VrShellDelegateProviderFactory>());
// TODO(https://crbug.com/837965): Move this to an ARCore-specific location
// with similar timing (occurs before VRDeviceManager is initialized).
device::ARCoreDeviceProviderFactory::Install(
new ARCoreDeviceProviderFactoryImpl);
std::make_unique<ARCoreDeviceProviderFactoryImpl>());
}
static void JNI_VrShellDelegate_RegisterVrAssetsComponent(
......
......@@ -4,6 +4,7 @@
#include "device/vr/android/arcore/arcore_device_provider_factory.h"
#include "base/logging.h"
#include "device/vr/vr_device_provider.h"
namespace device {
......@@ -21,11 +22,12 @@ ARCoreDeviceProviderFactory::Create() {
}
// static
void ARCoreDeviceProviderFactory::Install(ARCoreDeviceProviderFactory* f) {
if (g_arcore_device_provider_factory == f)
return;
delete g_arcore_device_provider_factory;
g_arcore_device_provider_factory = f;
void ARCoreDeviceProviderFactory::Install(
std::unique_ptr<ARCoreDeviceProviderFactory> factory) {
DCHECK_NE(g_arcore_device_provider_factory, factory.get());
if (g_arcore_device_provider_factory)
delete g_arcore_device_provider_factory;
g_arcore_device_provider_factory = factory.release();
}
} // namespace device
......@@ -16,11 +16,12 @@ class VRDeviceProvider;
class DEVICE_VR_EXPORT ARCoreDeviceProviderFactory {
public:
static std::unique_ptr<device::VRDeviceProvider> Create();
static void Install(ARCoreDeviceProviderFactory* factory);
static void Install(std::unique_ptr<ARCoreDeviceProviderFactory> factory);
virtual ~ARCoreDeviceProviderFactory() = default;
protected:
ARCoreDeviceProviderFactory() = default;
virtual ~ARCoreDeviceProviderFactory() = default;
virtual std::unique_ptr<device::VRDeviceProvider> CreateDeviceProvider() = 0;
......
......@@ -4,6 +4,8 @@
#include "device/vr/android/gvr/gvr_delegate_provider_factory.h"
#include "base/logging.h"
namespace device {
namespace {
......@@ -18,11 +20,12 @@ GvrDelegateProvider* GvrDelegateProviderFactory::Create() {
}
// static
void GvrDelegateProviderFactory::Install(GvrDelegateProviderFactory* f) {
if (g_gvr_delegate_provider_factory == f)
return;
delete g_gvr_delegate_provider_factory;
g_gvr_delegate_provider_factory = f;
void GvrDelegateProviderFactory::Install(
std::unique_ptr<GvrDelegateProviderFactory> factory) {
DCHECK_NE(g_gvr_delegate_provider_factory, factory.get());
if (g_gvr_delegate_provider_factory)
delete g_gvr_delegate_provider_factory;
g_gvr_delegate_provider_factory = factory.release();
}
} // namespace device
......@@ -5,6 +5,8 @@
#ifndef DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_
#define DEVICE_VR_ANDROID_GVR_DELEGATE_PROVIDER_FACTORY_H_
#include <memory>
#include "base/macros.h"
#include "device/vr/vr_export.h"
......@@ -16,11 +18,12 @@ class GvrDelegateProvider;
class DEVICE_VR_EXPORT GvrDelegateProviderFactory {
public:
static GvrDelegateProvider* Create();
static void Install(GvrDelegateProviderFactory* factory);
static void Install(std::unique_ptr<GvrDelegateProviderFactory> factory);
virtual ~GvrDelegateProviderFactory() = default;
protected:
GvrDelegateProviderFactory() = default;
virtual ~GvrDelegateProviderFactory() = default;
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