1 /* 2 * Copyright 2018 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 17 package android.hardware.display; 18 19 /** 20 * @hide 21 */ 22 public final class DisplayedContentSample { 23 private long mNumFrames; 24 private long[] mSamplesComponent0; 25 private long[] mSamplesComponent1; 26 private long[] mSamplesComponent2; 27 private long[] mSamplesComponent3; 28 29 /** 30 * Construct an object representing a color histogram of pixels that were displayed on screen. 31 * 32 * @param numFrames The number of frames represented by this sample. 33 * @param mSamplesComponent0 is a histogram counting how many times and for how long a pixel 34 * of a given value was displayed onscreen for FORMAT_COMPONENT_0. The buckets of the 35 * histogram are evenly weighted, the number of buckets is device specific. 36 * The units are in pixels * milliseconds, with 1 pixel millisecond being 1 pixel displayed 37 * onscreen for 1ms. 38 * eg, for RGBA_8888, if sampleComponent0 is {100, 50, 30, 20}, then red component was 39 * onscreen for 100 pixel milliseconds in range 0x00->0x3F, 30 pixel milliseconds in 40 * range 0x40->0x7F, etc. 41 * @param mSamplesComponent1 is the same sample definition as sampleComponent0, but for the 42 * second component of format. 43 * @param mSamplesComponent2 is the same sample definition as sampleComponent0, but for the 44 * third component of format. 45 * @param mSamplesComponent3 is the same sample definition as sampleComponent0, but for the 46 * fourth component of format. 47 */ DisplayedContentSample(long numFrames, long[] sampleComponent0, long[] sampleComponent1, long[] sampleComponent2, long[] sampleComponent3)48 public DisplayedContentSample(long numFrames, 49 long[] sampleComponent0, 50 long[] sampleComponent1, 51 long[] sampleComponent2, 52 long[] sampleComponent3) { 53 mNumFrames = numFrames; 54 mSamplesComponent0 = sampleComponent0; 55 mSamplesComponent1 = sampleComponent1; 56 mSamplesComponent2 = sampleComponent2; 57 mSamplesComponent3 = sampleComponent3; 58 } 59 60 public enum ColorComponent { 61 CHANNEL0, 62 CHANNEL1, 63 CHANNEL2, 64 CHANNEL3, 65 } 66 67 /** 68 * Returns a color histogram according to component channel. 69 * 70 * @param component the component to return, according to the PixelFormat ordering 71 * (eg, for RGBA, CHANNEL0 is R, CHANNEL1 is G, etc). 72 * 73 * @return an evenly weighted histogram counting how many times a pixel was 74 * displayed onscreen that fell into the corresponding bucket, with the first entry 75 * corresponding to the normalized 0.0 value, and the last corresponding to the 1.0 76 * value for that PixelFormat component. 77 */ getSampleComponent(ColorComponent component)78 public long[] getSampleComponent(ColorComponent component) { 79 switch (component) { 80 case CHANNEL0: return mSamplesComponent0; 81 case CHANNEL1: return mSamplesComponent1; 82 case CHANNEL2: return mSamplesComponent2; 83 case CHANNEL3: return mSamplesComponent3; 84 default: throw new ArrayIndexOutOfBoundsException(); 85 } 86 } 87 88 /** 89 * Return the number of frames this sample was collected over. 90 * 91 * @return the number of frames that this sample was collected over. 92 */ getNumFrames()93 public long getNumFrames() { 94 return mNumFrames; 95 } 96 } 97