• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.cts.deviceinfo;
17 
18 import android.hardware.display.DisplayManager;
19 import android.view.Display;
20 import android.view.Display.HdrCapabilities;
21 import android.view.Display.Mode;
22 
23 import com.android.compatibility.common.deviceinfo.DeviceInfo;
24 import com.android.compatibility.common.util.DeviceInfoStore;
25 import com.android.server.display.feature.flags.Flags;
26 
27 import java.util.Arrays;
28 import java.util.List;
29 import java.util.stream.Collectors;
30 
31 public class DisplayDeviceInfo extends DeviceInfo {
32 
33     private static final String HDR_CAPABILITIES = "hdr_capabilities";
34     private static final String SUPPORTED_HDR_TYPES = "supported_hdr_types";
35     private static final String MAX_LUMINANCE = "max_luminance";
36     private static final String MAX_AVERAGE_LUMINANCE = "max_average_luminance";
37     private static final String MIN_LUMINANCE = "min_luminance";
38     private static final String MAX_HDR_SDR_RATIO = "max_hdr_sdr_ratio";
39 
40     @Override
collectDeviceInfo(DeviceInfoStore store)41     protected void collectDeviceInfo(DeviceInfoStore store) throws Exception {
42         DisplayManager displayManager = (DisplayManager)
43                 getContext().getSystemService(DisplayManager.class);
44         store.startArray(HDR_CAPABILITIES);
45 
46         List<Display> internalDisplays = Arrays.stream(displayManager.getDisplays())
47                 .filter(d -> d != null)
48                 .filter(d -> d.getType() == Display.TYPE_INTERNAL)
49                 .filter(d -> d.isHdr())
50                 .collect(Collectors.toList());
51 
52         for (Display display: internalDisplays) {
53             store.startGroup();
54             int[] hdrTypes = Arrays.stream(display.getSupportedModes())
55                     .map(Mode::getSupportedHdrTypes)
56                     .flatMapToInt(Arrays::stream)
57                     .distinct().toArray();
58             store.addArrayResult(SUPPORTED_HDR_TYPES, hdrTypes);
59 
60             HdrCapabilities hdrCapabilities = display.getHdrCapabilities();
61 
62             store.addResult(MAX_LUMINANCE, hdrCapabilities.getDesiredMaxLuminance());
63             store.addResult(MAX_AVERAGE_LUMINANCE,
64                     hdrCapabilities.getDesiredMaxAverageLuminance());
65             store.addResult(MIN_LUMINANCE, hdrCapabilities.getDesiredMinLuminance());
66             if (Flags.highestHdrSdrRatioApi()) {
67                 store.addResult(MAX_HDR_SDR_RATIO, display.getHighestHdrSdrRatio());
68             }
69             store.endGroup();
70         }
71 
72         store.endArray(); // HDR_CAPABILITIES
73     }
74 }
75