| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 // | 4 // | 
| 5 // This is a small program that tries to connect to the X server.  It | 5 // This is a small program that tries to connect to the X server.  It | 
| 6 // continually retries until it connects or 5 seconds pass.  If it fails | 6 // continually retries until it connects or 5 seconds pass.  If it fails | 
| 7 // to connect to the X server after 5 seconds, it returns an error code | 7 // to connect to the X server after 5 seconds, it returns an error code | 
| 8 // of -1. | 8 // of -1. | 
| 9 // | 9 // | 
| 10 // This is to help verify that the X server is available before we start | 10 // This is to help verify that the X server is available before we start | 
| 11 // start running tests on the build bots. | 11 // start running tests on the build bots. | 
| 12 | 12 | 
| 13 #include <errno.h> | 13 #include <errno.h> | 
| 14 #include <stdio.h> | 14 #include <stdio.h> | 
| 15 #include <time.h> | 15 #include <time.h> | 
| 16 #include <X11/Xlib.h> | 16 #include <X11/Xlib.h> | 
| 17 | 17 | 
|  | 18 #if defined(TOUCH_UI) || defined(USE_AURA) | 
|  | 19 #include <X11/extensions/XInput2.h> | 
|  | 20 #endif | 
|  | 21 | 
| 18 void Sleep(int duration_ms) { | 22 void Sleep(int duration_ms) { | 
| 19   struct timespec sleep_time, remaining; | 23   struct timespec sleep_time, remaining; | 
| 20 | 24 | 
| 21   // Contains the portion of duration_ms >= 1 sec. | 25   // Contains the portion of duration_ms >= 1 sec. | 
| 22   sleep_time.tv_sec = duration_ms / 1000; | 26   sleep_time.tv_sec = duration_ms / 1000; | 
| 23   duration_ms -= sleep_time.tv_sec * 1000; | 27   duration_ms -= sleep_time.tv_sec * 1000; | 
| 24 | 28 | 
| 25   // Contains the portion of duration_ms < 1 sec. | 29   // Contains the portion of duration_ms < 1 sec. | 
| 26   sleep_time.tv_nsec = duration_ms * 1000 * 1000;  // nanoseconds. | 30   sleep_time.tv_nsec = duration_ms * 1000 * 1000;  // nanoseconds. | 
| 27 | 31 | 
| 28   while (nanosleep(&sleep_time, &remaining) == -1 && errno == EINTR) | 32   while (nanosleep(&sleep_time, &remaining) == -1 && errno == EINTR) | 
| 29     sleep_time = remaining; | 33     sleep_time = remaining; | 
| 30 } | 34 } | 
| 31 | 35 | 
| 32 int main(int argc, char* argv[]) { | 36 int main(int argc, char* argv[]) { | 
| 33   int kNumTries = 50; | 37   int kNumTries = 50; | 
|  | 38   Display* display = NULL; | 
| 34   for (int i = 0; i < kNumTries; ++i) { | 39   for (int i = 0; i < kNumTries; ++i) { | 
| 35     Display* display = XOpenDisplay(NULL); | 40     display = XOpenDisplay(NULL); | 
| 36     if (display) | 41     if (display) | 
| 37       return 0; | 42       break; | 
| 38     Sleep(100); | 43     Sleep(100); | 
| 39   } | 44   } | 
| 40 | 45 | 
| 41   printf("Failed to connect to %s\n", XDisplayName(NULL)); | 46   if (!display) { | 
| 42   return -1; | 47     fprintf(stderr, "Failed to connect to %s\n", XDisplayName(NULL)); | 
|  | 48     return -1; | 
|  | 49   } | 
|  | 50 | 
|  | 51 #if defined(TOUCH_UI) || defined(USE_AURA) | 
|  | 52   // Check for XInput2 | 
|  | 53   int opcode, event, err; | 
|  | 54   if (!XQueryExtension(display, "XInputExtension", &opcode, &event, &err)) { | 
|  | 55     fprintf(stderr, | 
|  | 56         "Failed to get XInputExtension on %s.\n", XDisplayName(NULL)); | 
|  | 57     return -1; | 
|  | 58   } | 
|  | 59 | 
|  | 60   int major = 2, minor = 0; | 
|  | 61   if (XIQueryVersion(display, &major, &minor) == BadRequest) { | 
|  | 62     fprintf(stderr, | 
|  | 63         "Server does not have XInput2 on %s.\n", XDisplayName(NULL)); | 
|  | 64     return -1; | 
|  | 65   } | 
|  | 66 | 
|  | 67   // Ask for the list of devices. This can cause some Xvfb to crash. | 
|  | 68   int count = 0; | 
|  | 69   XIDeviceInfo* devices = XIQueryDevice(display, XIAllDevices, &count); | 
|  | 70   if (devices) | 
|  | 71     XIFreeDeviceInfo(devices); | 
|  | 72 #endif | 
|  | 73 | 
|  | 74   return 0; | 
| 43 } | 75 } | 
| OLD | NEW | 
|---|