Chromium Code Reviews| 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) { |