Allow overlapping sync and async startup requests
[chromium-blink-merge.git] / chromeos / display / output_util.h
blobd2f1f01c4056bdf98dcd9194900b2349c94dc62e
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROMEOS_DISPLAY_OUTPUT_UTIL_H_
6 #define CHROMEOS_DISPLAY_OUTPUT_UTIL_H_
8 #include <string>
10 #include "base/basictypes.h"
11 #include "chromeos/chromeos_export.h"
13 // Forward declarations for Xlib and Xrandr.
14 // This is so unused X definitions don't pollute the namespace.
15 typedef unsigned long XID;
16 typedef XID RRMode;
17 struct _XRRModeInfo;
18 typedef _XRRModeInfo XRRModeInfo;
19 struct _XRRScreenResources;
20 typedef _XRRScreenResources XRRScreenResources;
21 struct _XRROutputInfo;
22 typedef _XRROutputInfo XRROutputInfo;
24 namespace chromeos {
26 // Gets the EDID data from |output| and generates the display id through
27 // |GetDisplayIdFromEDID|.
28 CHROMEOS_EXPORT bool GetDisplayId(XID output, size_t index,
29 int64* display_id_out);
31 // Generates the display id for the pair of |prop| with |nitems| length and
32 // |index|, and store in |display_id_out|. Returns true if the display id is
33 // successfully generated, or false otherwise.
34 CHROMEOS_EXPORT bool GetDisplayIdFromEDID(const unsigned char* prop,
35 unsigned long nitems,
36 size_t index,
37 int64* display_id_out);
39 // Generates the human readable string from EDID obtained for |output|.
40 CHROMEOS_EXPORT std::string GetDisplayName(XID output);
42 // Gets the overscan flag from |output| and stores to |flag|. Returns true if
43 // the flag is found. Otherwise returns false and doesn't touch |flag|. The
44 // output will produce overscan if |flag| is set to true, but the output may
45 // still produce overscan even though it returns true and |flag| is set to
46 // false.
47 CHROMEOS_EXPORT bool GetOutputOverscanFlag(XID output, bool* flag);
49 // Parses |prop| as EDID data and stores extracted data into |manufacturer_id|
50 // and |human_readable_name| and returns true. NULL can be passed for unwanted
51 // output parameters. Some devices (especially internal displays) may not have
52 // the field for |human_readable_name|, and it will return true in that case.
53 CHROMEOS_EXPORT bool ParseOutputDeviceData(const unsigned char* prop,
54 unsigned long nitems,
55 uint16* manufacturer_id,
56 std::string* human_readable_name);
58 // Parses |prop| as EDID data and stores the overscan flag to |flag|. Returns
59 // true if the flag is found. This is exported for x11_util_unittest.cc.
60 CHROMEOS_EXPORT bool ParseOutputOverscanFlag(const unsigned char* prop,
61 unsigned long nitems,
62 bool* flag);
64 // Returns true if an output named |name| is an internal display.
65 CHROMEOS_EXPORT bool IsInternalOutputName(const std::string& name);
67 // Find a XRRModeInfo that matches |mode|.
68 CHROMEOS_EXPORT const XRRModeInfo* FindXRRModeInfo(
69 const XRRScreenResources* screen_resources,
70 XID mode);
72 // Find a mode that matches the given size with highest refresh
73 // rate. Non-interlaced mode takes precedence, so non-interlaced mode
74 // with a lower refresh rate will be used even if there is an interlaced
75 // mode with a higher refresh rate.
76 CHROMEOS_EXPORT RRMode FindOutputModeMatchingSize(
77 const XRRScreenResources* screen_resources,
78 const XRROutputInfo* output_info,
79 size_t width,
80 size_t height);
82 namespace test {
84 // Creates XRRModeInfo for unit tests.
85 CHROMEOS_EXPORT XRRModeInfo CreateModeInfo(int id,
86 int width,
87 int height,
88 bool interlaced,
89 float refresh_rate);
91 } // namespace test
93 } // namespace chromeos
95 #endif // CHROMEOS_DISPLAY_OUTPUT_UTIL_H_