diff options
author | Dominik Laskowski <domlaskowski@google.com> | 2019-11-21 11:14:45 -0800 |
---|---|---|
committer | Dominik Laskowski <domlaskowski@google.com> | 2020-01-29 13:59:26 -0800 |
commit | 3cb3d4e3906eb43a01464e8862772295dab50f78 (patch) | |
tree | bcdf7a4b117cfa538d339c2d806c7e66178f6e1f /opengl/tests/lib/WindowSurface.cpp | |
parent | 68d6b2f5a5cd7c749203519fbfd3ae796875657a (diff) |
SF: Redesign API to query display information
The DisplayInfo list returned by ISurfaceComposer for display configs
contains display information/state redundant across configs.
Extract config information to DisplayConfig, and repurpose DisplayInfo
for immutable information about a physical display. In a future CL, SF
will populate DisplayInfo with additional data (e.g. connection type,
EDID fields) on initial connection. DisplayConfigs retain the ability
to reload on subsequent connections. Introduce ui::DisplayState for
transactional state applicable to both physical and virtual displays.
Bug: 144601064
Test: dumpsys display
Change-Id: I72003e8ef71483ef483d0de85d28b859a6c9f5fc
Diffstat (limited to 'opengl/tests/lib/WindowSurface.cpp')
-rw-r--r-- | opengl/tests/lib/WindowSurface.cpp | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/opengl/tests/lib/WindowSurface.cpp b/opengl/tests/lib/WindowSurface.cpp index 4dcc1ca4db..dfb9c92b5f 100644 --- a/opengl/tests/lib/WindowSurface.cpp +++ b/opengl/tests/lib/WindowSurface.cpp @@ -16,10 +16,13 @@ #include <WindowSurface.h> -#include <gui/SurfaceComposerClient.h> +#include <utility> + #include <gui/ISurfaceComposer.h> #include <gui/Surface.h> -#include <ui/DisplayInfo.h> +#include <gui/SurfaceComposerClient.h> +#include <ui/DisplayConfig.h> +#include <ui/DisplayState.h> using namespace android; @@ -33,28 +36,33 @@ WindowSurface::WindowSurface() { return; } - // Get main display parameters. - const auto mainDpy = SurfaceComposerClient::getInternalDisplayToken(); - if (mainDpy == nullptr) { + const auto displayToken = SurfaceComposerClient::getInternalDisplayToken(); + if (displayToken == nullptr) { fprintf(stderr, "ERROR: no display\n"); return; } - DisplayInfo mainDpyInfo; - err = SurfaceComposerClient::getDisplayInfo(mainDpy, &mainDpyInfo); + DisplayConfig displayConfig; + err = SurfaceComposerClient::getActiveDisplayConfig(displayToken, &displayConfig); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: unable to get active display config\n"); + return; + } + + ui::DisplayState displayState; + err = SurfaceComposerClient::getDisplayState(displayToken, &displayState); if (err != NO_ERROR) { - fprintf(stderr, "ERROR: unable to get display characteristics\n"); + fprintf(stderr, "ERROR: unable to get display state\n"); return; } - uint32_t width, height; - if (mainDpyInfo.orientation != ui::ROTATION_0 && mainDpyInfo.orientation != ui::ROTATION_180) { - // rotated - width = mainDpyInfo.h; - height = mainDpyInfo.w; - } else { - width = mainDpyInfo.w; - height = mainDpyInfo.h; + const ui::Size& resolution = displayConfig.resolution; + auto width = resolution.getWidth(); + auto height = resolution.getHeight(); + + if (displayState.orientation == ui::ROTATION_90 || + displayState.orientation == ui::ROTATION_270) { + std::swap(width, height); } sp<SurfaceControl> sc = surfaceComposerClient->createSurface( |