Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0291840f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "composer 2.4: add api to control vsync period"

parents 8ea7f3c6 7882ae68
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -7,7 +7,9 @@ hidl_interface {
        enabled: true,
    },
    srcs: [
        "types.hal",
        "IComposer.hal",
        "IComposerCallback.hal",
        "IComposerClient.hal",
    ],
    interfaces: [
+35 −0
Original line number Diff line number Diff line
/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware.graphics.composer@2.4;

import @2.1::Display;
import @2.1::IComposerCallback;

interface IComposerCallback extends @2.1::IComposerCallback {
    /**
     * Notifies the client that a vsync event has occurred. This callback must
     * only be triggered when vsync is enabled for this display (through
     * setVsyncEnabled).
     *
     * @param display is the display which has received a vsync event
     * @param timestamp is the CLOCK_MONOTONIC time at which the vsync event
     *        occurred, in nanoseconds.
     * @param vsyncPeriodNanos is the display vsync period in nanoseconds i.e. the next onVsync_2_4
     *        is expected to be called vsyncPeriodNanos nanoseconds after this call.
     */
    oneway onVsync_2_4(Display display, int64_t timestamp, VsyncPeriodNanos vsyncPeriodNanos);
};
+87 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.hardware.graphics.composer@2.4;

import IComposerCallback;
import @2.1::Config;
import @2.1::Display;
import @2.1::Error;
import @2.3::IComposerClient;
@@ -49,6 +51,32 @@ interface IComposerClient extends @2.3::IComposerClient {
        EXTERNAL = 1,
    };

    /**
     * Constraints for changing vsync period.
     */
    struct VsyncPeriodChangeConstraints {
        /**
         * Time in CLOCK_MONOTONIC after which the vsync period may change
         * (i.e., the vsync period must not change before this time).
         */
        int64_t desiredTimeNanos;
        /**
         * If true, requires that the vsync period change must happen seamlessly without
         * a noticeable visual artifact.
         */
        bool seamlessRequired;
    };

    /**
     * Provides a IComposerCallback object for the device to call.
     *
     * This function must be called only once.
     *
     * @param callback is the IComposerCallback object.
     */
    @entry
    registerCallback_2_4(IComposerCallback callback);

    /**
     * Provides a list of supported capabilities (as described in the
     * definition of DisplayCapability above). This list must not change after
@@ -69,4 +97,63 @@ interface IComposerClient extends @2.3::IComposerClient {
     * @return type is the connection type of the display.
     */
    getDisplayConnectionType(Display display) generates (Error error, DisplayConnectionType type);

    /**
     * Provides a list of the vsync periods supported by the display in the given configuration
     *
     * @param display is the display for which the vsync periods are queried.
     * @param config is the display configuration for which the vsync periods are queried.
     *
     * @return error is NONE upon success. Otherwise,
     *     BAD_DISPLAY when an invalid display handle was passed in.
     *     BAD_CONFIG when an invalid config handle was passed in.
     * @return supportedVsyncPeriods is a list of supported vsync periods.
     */
    getSupportedDisplayVsyncPeriods(Display display, Config config)
        generates (Error error, vec<VsyncPeriodNanos> supportedVsyncPeriods);

    /**
     * Retrieves which vsync period the display is currently using.
     *
     * If no display configuration is currently active, this function must
     * return BAD_CONFIG. If the vsync period is about to change due to a
     * setActiveConfigAndVsyncPeriod call, this function must return the current vsync period
     * until the change takes place.
     *
     * @param display is the display for which the vsync period is queried.
     * @return error is NONE upon success. Otherwise,
     *         BAD_DISPLAY when an invalid display handle was passed in.
     *         BAD_CONFIG when no configuration is currently active.
     * @return vsyncPeriodNanos is the current vsync period of the display.
     */
    getDisplayVsyncPeriod(Display display)
        generates (Error error, VsyncPeriodNanos vsyncPeriodNanos);

    /**
     * Sets the active configuration and the refresh rate for this display.
     * If the config is the same as the current config, only the vsync period shall change.
     * Upon returning, the given display configuration, except vsync period, must be active and
     * remain so until either this function is called again or the display is disconnected.
     * When the display starts to refresh at the new vsync period, onVsync_2_4 callback must be
     * called with the new vsync period.
     *
     * @param display is the display for which the active config is set.
     * @param config is the new display configuration.
     * @param vsyncPeriodNanos is the new display vsync period.
     * @param vsyncPeriodChangeConstraints are the constraints required for changing vsync period.
     *
     * @return error is NONE upon success. Otherwise,
     *         BAD_DISPLAY when an invalid display handle was passed in.
     *         BAD_CONFIG when the configuration handle passed in is not valid
     *                    for this display.
     *         BAD_VSYNC_PERIOD when an invalid vsync period is passed in.
     *         SEAMLESS_NOT_POSSIBLE when seamlessRequired was true but the display cannot achieve
     *                               the vsync period change without a noticeable visual artifact.
     * @return newVsyncAppliedTime is the time in CLOCK_MONOTONIC when the new display will start to
     *                             refresh at the new vsync period.
     */
    setActiveConfigAndVsyncPeriod(Display display, Config config,
        VsyncPeriodNanos vsyncPeriodNanos,
        VsyncPeriodChangeConstraints vsyncPeriodChangeConstraints)
        generates (Error error, int64_t newVsyncAppliedTime);
};
+32 −0
Original line number Diff line number Diff line
/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware.graphics.composer@2.4;

import @2.1::Error;

enum Error : @2.1::Error {
    /**
     * Invalid vsync period
     */
    BAD_VSYNC_PERIOD = 9,
    /**
     * Seamless requirements cannot be met
     */
    SEAMLESS_NOT_POSSIBLE = 10,
};

typedef uint32_t VsyncPeriodNanos;
+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ namespace composer {
namespace V2_4 {

using android::hardware::MessageQueue;
using android::hardware::graphics::composer::V2_1::Error;
using android::hardware::graphics::composer::V2_4::Error;
using android::hardware::graphics::composer::V2_4::IComposerClient;

// This class helps build a command queue.  Note that all sizes/lengths are in
Loading