Commit a73dfdba authored by Stephen McGruer's avatar Stephen McGruer Committed by Commit Bot

[Accessibility] Add histograms for Android reduce-motion API

This histogram will be used to guide the implementation of the CSS
prefers-reduced-motion media feature. The primary goal is to compare
usage levels across platforms.

Bug: 722548
Change-Id: I9162d4e9df2e04afa0c8716266c2f0dc2c57b2ac
Reviewed-on: https://chromium-review.googlesource.com/c/1330827Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Commit-Queue: Stephen McGruer <smcgruer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608052}
parent 8367c32c
...@@ -2177,6 +2177,7 @@ jumbo_source_set("browser") { ...@@ -2177,6 +2177,7 @@ jumbo_source_set("browser") {
"accessibility/browser_accessibility_android.h", "accessibility/browser_accessibility_android.h",
"accessibility/browser_accessibility_manager_android.cc", "accessibility/browser_accessibility_manager_android.cc",
"accessibility/browser_accessibility_manager_android.h", "accessibility/browser_accessibility_manager_android.h",
"accessibility/browser_accessibility_state_impl_android.cc",
"accessibility/captioning_controller.cc", "accessibility/captioning_controller.cc",
"accessibility/captioning_controller.h", "accessibility/captioning_controller.h",
"accessibility/web_contents_accessibility_android.cc", "accessibility/web_contents_accessibility_android.cc",
......
...@@ -71,7 +71,7 @@ BrowserAccessibilityStateImpl::BrowserAccessibilityStateImpl() ...@@ -71,7 +71,7 @@ BrowserAccessibilityStateImpl::BrowserAccessibilityStateImpl()
// Let each platform do its own initialization. // Let each platform do its own initialization.
PlatformInitialize(); PlatformInitialize();
#if defined(OS_WIN) #if defined(OS_WIN) || defined(OS_ANDROID)
// The delay is necessary because assistive technology sometimes isn't // The delay is necessary because assistive technology sometimes isn't
// detected until after the user interacts in some way, so a reasonable delay // detected until after the user interacts in some way, so a reasonable delay
// gives us better numbers. // gives us better numbers.
...@@ -80,8 +80,8 @@ BrowserAccessibilityStateImpl::BrowserAccessibilityStateImpl() ...@@ -80,8 +80,8 @@ BrowserAccessibilityStateImpl::BrowserAccessibilityStateImpl()
base::Bind(&BrowserAccessibilityStateImpl::UpdateHistograms, this), base::Bind(&BrowserAccessibilityStateImpl::UpdateHistograms, this),
base::TimeDelta::FromSeconds(ACCESSIBILITY_HISTOGRAM_DELAY_SECS)); base::TimeDelta::FromSeconds(ACCESSIBILITY_HISTOGRAM_DELAY_SECS));
#else #else
// On all other platforms, UpdateHistograms should be called on the UI // On MacOS, UpdateHistograms should be called on the UI thread because it
// thread because it needs to be able to access PrefService. // needs to be able to access PrefService.
base::PostDelayedTaskWithTraits( base::PostDelayedTaskWithTraits(
FROM_HERE, {BrowserThread::UI}, FROM_HERE, {BrowserThread::UI},
base::BindOnce(&BrowserAccessibilityStateImpl::UpdateHistograms, this), base::BindOnce(&BrowserAccessibilityStateImpl::UpdateHistograms, this),
...@@ -170,7 +170,7 @@ ui::AXMode BrowserAccessibilityStateImpl::GetAccessibilityMode() const { ...@@ -170,7 +170,7 @@ ui::AXMode BrowserAccessibilityStateImpl::GetAccessibilityMode() const {
return accessibility_mode_; return accessibility_mode_;
} }
#if !defined(OS_WIN) && !defined(OS_MACOSX) #if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_MACOSX)
void BrowserAccessibilityStateImpl::PlatformInitialize() {} void BrowserAccessibilityStateImpl::PlatformInitialize() {}
void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() { void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "base/android/jni_android.h"
#include "content/public/browser/browser_thread.h"
#include "jni/BrowserAccessibilityState_jni.h"
using base::android::AttachCurrentThread;
namespace content {
void BrowserAccessibilityStateImpl::PlatformInitialize() {}
void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {
// NOTE: this method is run from the file thread to reduce jank, since
// there's no guarantee these system calls will return quickly. Be careful
// not to add any code that isn't safe to run from a non-main thread!
DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
JNIEnv* env = AttachCurrentThread();
Java_BrowserAccessibilityState_recordAccessibilityHistograms(env);
}
} // namespace content
...@@ -152,6 +152,7 @@ android_library("content_java") { ...@@ -152,6 +152,7 @@ android_library("content_java") {
"java/src/org/chromium/content/browser/accessibility/LollipopWebContentsAccessibility.java", "java/src/org/chromium/content/browser/accessibility/LollipopWebContentsAccessibility.java",
"java/src/org/chromium/content/browser/accessibility/OWebContentsAccessibility.java", "java/src/org/chromium/content/browser/accessibility/OWebContentsAccessibility.java",
"java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java", "java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java",
"java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityState.java",
"java/src/org/chromium/content/browser/accessibility/captioning/CaptioningBridgeFactory.java", "java/src/org/chromium/content/browser/accessibility/captioning/CaptioningBridgeFactory.java",
"java/src/org/chromium/content/browser/accessibility/captioning/CaptioningChangeDelegate.java", "java/src/org/chromium/content/browser/accessibility/captioning/CaptioningChangeDelegate.java",
"java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java", "java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java",
...@@ -382,6 +383,7 @@ generate_jni("content_jni_headers") { ...@@ -382,6 +383,7 @@ generate_jni("content_jni_headers") {
"java/src/org/chromium/content/browser/SpeechRecognitionImpl.java", "java/src/org/chromium/content/browser/SpeechRecognitionImpl.java",
"java/src/org/chromium/content/browser/SyntheticGestureTarget.java", "java/src/org/chromium/content/browser/SyntheticGestureTarget.java",
"java/src/org/chromium/content/browser/TracingControllerAndroidImpl.java", "java/src/org/chromium/content/browser/TracingControllerAndroidImpl.java",
"java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityState.java",
"java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java", "java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java",
"java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java", "java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java",
"java/src/org/chromium/content/browser/androidoverlay/AndroidOverlayProviderImpl.java", "java/src/org/chromium/content/browser/androidoverlay/AndroidOverlayProviderImpl.java",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content.browser.accessibility;
import android.annotation.TargetApi;
import android.os.Build;
import android.provider.Settings;
import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.metrics.RecordHistogram;
/**
* Provides utility methods relating to measuring accessibility state on the current platform (i.e.
* Android in this case). See content::BrowserAccessibilityStateImpl.
*/
@JNINamespace("content")
public class BrowserAccessibilityState {
@CalledByNative
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private static void recordAccessibilityHistograms() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) return;
float durationScale =
Settings.Global.getFloat(ContextUtils.getApplicationContext().getContentResolver(),
Settings.Global.ANIMATOR_DURATION_SCALE, 0);
RecordHistogram.recordBooleanHistogram(
"Accessibility.Android.AnimationsEnabled", durationScale != 0.0);
}
}
...@@ -25,6 +25,18 @@ uploading your change for review. ...@@ -25,6 +25,18 @@ uploading your change for review.
<histograms> <histograms>
<histogram name="Accessibility.Android.AnimationsEnabled" enum="BooleanEnabled"
expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>smcgruer@chromium.org</owner>
<summary>
Tracks whether animations are enabled on Android (e.g. if the animator
duration scale is non-zero.) The purpose is to inform the design of the
prefers-reduced-motion media feature; see http://crbug.com/722548. This is
checked once, 45 seconds after startup.
</summary>
</histogram>
<histogram name="Accessibility.Android.TabSwitcherPreferenceEnabled" <histogram name="Accessibility.Android.TabSwitcherPreferenceEnabled"
enum="BooleanEnabled"> enum="BooleanEnabled">
<owner>twellington@chromium.org</owner> <owner>twellington@chromium.org</owner>
...@@ -339,7 +351,8 @@ uploading your change for review. ...@@ -339,7 +351,8 @@ uploading your change for review.
</summary> </summary>
</histogram> </histogram>
<histogram name="Accessibility.Mac.ReduceMotion" enum="BooleanEnabled"> <histogram name="Accessibility.Mac.ReduceMotion" enum="BooleanEnabled"
expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner> <owner>dmazzoni@chromium.org</owner>
<owner>smcgruer@chromium.org</owner> <owner>smcgruer@chromium.org</owner>
<summary> <summary>
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