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

Commit a42b4733 authored by Jerome Gaillard's avatar Jerome Gaillard Committed by Android (Google) Code Review
Browse files

Merge changes from topic "host-device-info" into main

* changes:
  Add JankTracker to host build for libhwui
  Add DeviceInfo to host build for libhwui
  Delete unneeded #ifdef
  Expand host build of libhwui
parents e9b07927 6352d1c1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -400,6 +400,7 @@ cc_library_shared_for_libandroid_runtime {
                "libbinary_parse",
                "libdng_sdk",
                "libft2",
                "libhostgraphics",
                "libhwui",
                "libimage_type_recognition",
                "libjpeg",
+159 −0
Original line number Diff line number Diff line
/*
 * Copyright 2024 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.
 */

#include <apex/display.h>
#include <utils/Errors.h>

namespace android::display::impl {

/**
 * Implementation of ADisplayConfig
 */
struct DisplayConfigImpl {
    /**
     * The width in pixels of the display configuration.
     */
    int32_t width{1080};

    /**
     * The height in pixels of the display configuration.
     */

    int32_t height{1920};

    /**
     * The refresh rate of the display configuration, in frames per second.
     */
    float fps{60.0};

    /**
     * The vsync offset at which surfaceflinger runs, in nanoseconds.
     */
    int64_t sfOffset{0};

    /**
     * The vsync offset at which applications run, in nanoseconds.
     */
    int64_t appOffset{0};
};

// DisplayConfigImpl allocation is not managed through C++ memory apis, so
// preventing calling the destructor here.
static_assert(std::is_trivially_destructible<DisplayConfigImpl>::value);

/**
 * Implementation of ADisplay
 */
struct DisplayImpl {
    /**
     * The type of the display, i.e. whether it is an internal or external
     * display.
     */
    ADisplayType type;

    /**
     * The preferred WCG dataspace
     */
    ADataSpace wcgDataspace;

    /**
     * The preferred WCG pixel format
     */
    AHardwareBuffer_Format wcgPixelFormat;

    /**
     * The config for this display.
     */
    DisplayConfigImpl config;
};

// DisplayImpl allocation is not managed through C++ memory apis, so
// preventing calling the destructor here.
static_assert(std::is_trivially_destructible<DisplayImpl>::value);

} // namespace android::display::impl

using namespace android;
using namespace android::display::impl;

namespace android {

int ADisplay_acquirePhysicalDisplays(ADisplay*** outDisplays) {
    // This is running on host, so there are no physical displays available.
    // Create 1 fake display instead.
    DisplayImpl** const impls = reinterpret_cast<DisplayImpl**>(
            malloc(sizeof(DisplayImpl*) + sizeof(DisplayImpl)));
    DisplayImpl* const displayData = reinterpret_cast<DisplayImpl*>(impls + 1);

    displayData[0] = DisplayImpl{ADisplayType::DISPLAY_TYPE_INTERNAL,
                                 ADataSpace::ADATASPACE_UNKNOWN,
                                 AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM,
                                 DisplayConfigImpl()};
    impls[0] = displayData;
    *outDisplays = reinterpret_cast<ADisplay**>(impls);
    return 1;
}

void ADisplay_release(ADisplay** displays) {
    if (displays == nullptr) {
        return;
    }
    free(displays);
}

float ADisplay_getMaxSupportedFps(ADisplay* display) {
    DisplayImpl* impl = reinterpret_cast<DisplayImpl*>(display);
    return impl->config.fps;
}

ADisplayType ADisplay_getDisplayType(ADisplay* display) {
    return reinterpret_cast<DisplayImpl*>(display)->type;
}

void ADisplay_getPreferredWideColorFormat(ADisplay* display, ADataSpace* outDataspace,
                                          AHardwareBuffer_Format* outPixelFormat) {
    DisplayImpl* impl = reinterpret_cast<DisplayImpl*>(display);
    *outDataspace = impl->wcgDataspace;
    *outPixelFormat = impl->wcgPixelFormat;
}

int ADisplay_getCurrentConfig(ADisplay* display, ADisplayConfig** outConfig) {
    DisplayImpl* impl = reinterpret_cast<DisplayImpl*>(display);
    *outConfig = reinterpret_cast<ADisplayConfig*>(&impl->config);
    return OK;
}

int32_t ADisplayConfig_getWidth(ADisplayConfig* config) {
    return reinterpret_cast<DisplayConfigImpl*>(config)->width;
}

int32_t ADisplayConfig_getHeight(ADisplayConfig* config) {
    return reinterpret_cast<DisplayConfigImpl*>(config)->height;
}

float ADisplayConfig_getFps(ADisplayConfig* config) {
    return reinterpret_cast<DisplayConfigImpl*>(config)->fps;
}

int64_t ADisplayConfig_getCompositorOffsetNanos(ADisplayConfig* config) {
    return reinterpret_cast<DisplayConfigImpl*>(config)->sfOffset;
}

int64_t ADisplayConfig_getAppVsyncOffsetNanos(ADisplayConfig* config) {
    return reinterpret_cast<DisplayConfigImpl*>(config)->appOffset;
}

} // namespace android
+9 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ cc_library_host_static {

    srcs: [
        ":libui_host_common",
        "ADisplay.cpp",
        "Fence.cpp",
        "HostBufferQueue.cpp",
        "PublicFormat.cpp",
@@ -32,16 +33,21 @@ cc_library_host_static {
        // When frameworks/native/include will be removed from the list of automatic includes.
        // We will have to copy necessary headers with a pre-build step (generated headers).
        ".",
        "frameworks/native/libs/nativebase/include",
        "frameworks/native/libs/nativewindow/include",
        "frameworks/native/libs/arect/include",
        "frameworks/native/libs/ui/include_private",
    ],

    header_libs: [
        "libnativebase_headers",
        "libnativedisplay_headers",
        "libnativewindow_headers",
    ],

    export_include_dirs: ["."],

    target: {
        windows: {
            enabled: true,
        }
        },
    },
}
+15 −8
Original line number Diff line number Diff line
@@ -346,6 +346,7 @@ cc_defaults {
        "jni/android_util_PathParser.cpp",

        "jni/Bitmap.cpp",
        "jni/BitmapRegionDecoder.cpp",
        "jni/BufferUtils.cpp",
        "jni/HardwareBufferHelpers.cpp",
        "jni/BitmapFactory.cpp",
@@ -421,7 +422,6 @@ cc_defaults {
                "jni/android_graphics_TextureLayer.cpp",
                "jni/android_graphics_HardwareRenderer.cpp",
                "jni/android_graphics_HardwareBufferRenderer.cpp",
                "jni/BitmapRegionDecoder.cpp",
                "jni/GIFMovie.cpp",
                "jni/GraphicsStatsService.cpp",
                "jni/Movie.cpp",
@@ -559,8 +559,13 @@ cc_defaults {
        "AnimatorManager.cpp",
        "CanvasTransform.cpp",
        "DamageAccumulator.cpp",
        "DeviceInfo.cpp",
        "FrameInfo.cpp",
        "FrameInfoVisualizer.cpp",
        "FrameMetricsReporter.cpp",
        "Gainmap.cpp",
        "Interpolator.cpp",
        "JankTracker.cpp",
        "LightingInfo.cpp",
        "Matrix.cpp",
        "Mesh.cpp",
@@ -623,13 +628,8 @@ cc_defaults {
                "utils/NdkUtils.cpp",
                "AutoBackendTextureRelease.cpp",
                "DeferredLayerUpdater.cpp",
                "DeviceInfo.cpp",
                "FrameInfo.cpp",
                "FrameInfoVisualizer.cpp",
                "HardwareBitmapUploader.cpp",
                "HWUIProperties.sysprop",
                "JankTracker.cpp",
                "FrameMetricsReporter.cpp",
                "Layer.cpp",
                "LayerUpdateQueue.cpp",
                "ProfileDataContainer.cpp",
@@ -643,7 +643,10 @@ cc_defaults {
            cflags: ["-Wno-implicit-fallthrough"],
        },
        host: {
            header_libs: ["libnativebase_headers"],
            header_libs: [
                "libnativebase_headers",
                "libnativedisplay_headers",
            ],

            local_include_dirs: ["platform/host"],

@@ -655,7 +658,11 @@ cc_defaults {
                "platform/host/WebViewFunctorManager.cpp",
            ],

            cflags: ["-Wno-unused-private-field"],
            cflags: [
                "-DHWUI_NULL_GPU",
                "-DNULL_GPU_MAX_TEXTURE_SIZE=4096",
                "-Wno-unused-private-field",
            ],
        },
    },
}
+2 −0
Original line number Diff line number Diff line
@@ -249,6 +249,7 @@ bool FrameInfoVisualizer::consumeProperties() {
}

void FrameInfoVisualizer::dumpData(int fd) {
#ifdef __ANDROID__
    RETURN_IF_PROFILING_DISABLED();

    // This method logs the last N frames (where N is <= mDataSize) since the
@@ -268,6 +269,7 @@ void FrameInfoVisualizer::dumpData(int fd) {
                durationMS(i, FrameInfoIndex::IssueDrawCommandsStart, FrameInfoIndex::SwapBuffers),
                durationMS(i, FrameInfoIndex::SwapBuffers, FrameInfoIndex::FrameCompleted));
    }
#endif
}

} /* namespace uirenderer */
Loading