Index: chrome/browser/android/vr_shell/vr_shell_delegate.cc |
diff --git a/chrome/browser/android/vr_shell/vr_shell_delegate.cc b/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
index 70daa50b10b366d2c1c2b5ce7fe329be20fb0c4e..f2c6f55a40869e630425594d81ca9a612adee6bb 100644 |
--- a/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
+++ b/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
@@ -9,6 +9,7 @@ |
#include "base/android/jni_android.h" |
#include "base/callback_helpers.h" |
#include "chrome/browser/android/vr_shell/non_presenting_gvr_delegate.h" |
+#include "chrome/browser/android/vr_shell/vr_usage_monitor.h" |
#include "device/vr/android/gvr/gvr_delegate.h" |
#include "device/vr/android/gvr/gvr_device.h" |
#include "device/vr/android/gvr/gvr_device_provider.h" |
@@ -16,6 +17,7 @@ |
using base::android::JavaParamRef; |
using base::android::AttachCurrentThread; |
+using base::android::ScopedJavaLocalRef; |
namespace vr_shell { |
@@ -38,8 +40,7 @@ VrShellDelegate::~VrShellDelegate() { |
device::GvrDelegateProvider* VrShellDelegate::CreateVrShellDelegate() { |
JNIEnv* env = AttachCurrentThread(); |
- base::android::ScopedJavaLocalRef<jobject> jdelegate = |
- Java_VrShellDelegate_getInstance(env); |
+ ScopedJavaLocalRef<jobject> jdelegate = Java_VrShellDelegate_getInstance(env); |
if (!jdelegate.is_null()) |
return GetNativeVrShellDelegate(env, jdelegate.obj()); |
return nullptr; |
@@ -56,9 +57,9 @@ void VrShellDelegate::SetPresentingDelegate( |
gvr_context* context) { |
presenting_delegate_ = delegate; |
// Clean up the non-presenting delegate. |
+ JNIEnv* env = AttachCurrentThread(); |
if (presenting_delegate_ && non_presenting_delegate_) { |
non_presenting_delegate_ = nullptr; |
- JNIEnv* env = AttachCurrentThread(); |
Java_VrShellDelegate_shutdownNonPresentingNativeContext( |
env, j_vr_shell_delegate_.obj()); |
} |
@@ -74,6 +75,8 @@ void VrShellDelegate::SetPresentingDelegate( |
base::ResetAndReturn(&present_callback_).Run(true); |
pending_successful_present_request_ = false; |
} |
+ |
+ VrMetricsHelper::LogGvrVersionAndVrViewerType(context, GetGvrVersion(env)); |
} |
void VrShellDelegate::RemoveDelegate() { |
@@ -195,6 +198,40 @@ void VrShellDelegate::ExitWebVRPresent() { |
} |
} |
+gvr_version VrShellDelegate::GetGvrVersion(JNIEnv* env) { |
+ ScopedJavaLocalRef<jobject> j_vr_core_info = |
+ Java_VrShellDelegate_getVrCoreInfo(env, j_vr_shell_delegate_.obj()); |
+ jclass j_vr_core_info_class = env->GetObjectClass(j_vr_core_info.obj()); |
+ jfieldID j_field_id = env->GetFieldID(j_vr_core_info_class, "version", |
+ "Lcom/google/vr/ndk/base/Version;"); |
+ jobject j_version_object = |
+ env->GetObjectField(j_vr_core_info.obj(), j_field_id); |
+ gvr_version gvr_version; |
+ if (j_version_object) { |
+ j_vr_core_info_class = env->GetObjectClass(j_version_object); |
+ j_field_id = env->GetFieldID(j_vr_core_info_class, "majorVersion", "I"); |
ddorwin
2017/05/05 20:29:59
Aren't these members on a member of this class?
tiborg
2017/05/10 20:39:51
Yep, pretty much. Are you aware of an easier way t
|
+ gvr_version.major = env->GetIntField(j_version_object, j_field_id); |
+ j_field_id = env->GetFieldID(j_vr_core_info_class, "minorVersion", "I"); |
+ gvr_version.minor = env->GetIntField(j_version_object, j_field_id); |
+ j_field_id = env->GetFieldID(j_vr_core_info_class, "patchVersion", "I"); |
+ gvr_version.patch = env->GetIntField(j_version_object, j_field_id); |
+ } else { |
+ j_field_id = env->GetFieldID(j_vr_core_info_class, "compatibility", "I"); |
+ jint compatibility = env->GetIntField(j_vr_core_info.obj(), j_field_id); |
+ |
+ if (compatibility == 2) { |
ddorwin
2017/05/05 20:29:59
s/2/constant?
tiborg
2017/05/10 20:39:52
Done.
|
+ gvr_version.major = 0; |
+ gvr_version.minor = 0; |
+ gvr_version.patch = 0; |
+ } else { |
+ gvr_version.major = -1; |
+ gvr_version.minor = -1; |
+ gvr_version.patch = -1; |
+ } |
+ } |
+ return gvr_version; |
+} |
+ |
void VrShellDelegate::CreateNonPresentingDelegate() { |
JNIEnv* env = AttachCurrentThread(); |
gvr_context* context = reinterpret_cast<gvr_context*>( |
@@ -204,6 +241,7 @@ void VrShellDelegate::CreateNonPresentingDelegate() { |
base::MakeUnique<NonPresentingGvrDelegate>(context); |
non_presenting_delegate_->UpdateVSyncInterval(timebase_nanos_, |
interval_seconds_); |
+ VrMetricsHelper::LogGvrVersionAndVrViewerType(context, GetGvrVersion(env)); |
} |
void VrShellDelegate::OnActivateDisplayHandled(bool present_requested) { |