| // 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.chrome.browser.vr.rules; |
| |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| |
| /** |
| * An annotation for setting the VrCore head tracking service's tracking mode during pre-test setup. |
| * |
| * The benefit of setting the mode this way instead of via HeadTrackingUtils during a test is that |
| * starting services is asynchronous with no good way of waiting until whatever the service does |
| * takes effect. When set during a test, the test must idle long enough to safely assume that the |
| * service has taken effect. When applied during test setup, the Chrome startup period acts as the |
| * wait, as Chrome startup is slow enough that it's safe to assume the service has started by the |
| * time Chrome is ready. |
| * |
| * For example, the following would cause a test to start with its head position locked looking |
| * straight forward: |
| * <code> |
| * @HeadTrackingMode(HeadTrackingMode.SupportedMode.FROZEN) |
| * </code> |
| * If a test is not annotated with this, it will use whatever mode is currently set. This should |
| * usually be the normal, sensor-based tracker, but is not guaranteed. |
| */ |
| @Target({ElementType.METHOD}) |
| @Retention(RetentionPolicy.RUNTIME) |
| public @interface HeadTrackingMode { |
| public enum SupportedMode { |
| FROZEN, // Locked looking straight forward. |
| SWEEP, // Rotates back and forth horizontally in a 180 degree arc. |
| ROTATE, // Rotates 360 degrees. |
| CIRCLE_STRAFE, // Rotates 360 degrees, and if 6DOF is supported, changes position. |
| MOTION_SICKNESS // Moves in a figure-eight-like pattern. |
| } |
| |
| /** |
| * @return The supported mode. |
| */ |
| public SupportedMode value(); |
| } |