14ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown/* 24ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * Copyright (C) 2013 The Android Open Source Project 34ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * 44ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 54ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * you may not use this file except in compliance with the License. 64ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * You may obtain a copy of the License at 74ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * 84ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 94ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * 104ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * Unless required by applicable law or agreed to in writing, software 114ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 124ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * See the License for the specific language governing permissions and 144ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * limitations under the License. 154ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown */ 164ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 174ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brownpackage com.android.server; 184ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 194ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brownimport android.os.Handler; 204ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 214ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown/** 224ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * Shared singleton foreground thread for the system. This is a thread for 234ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * operations that affect what's on the display, which needs to have a minimum 244ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * of latency. This thread should pretty much only be used by the WindowManager, 254ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown * DisplayManager, and InputManager to perform quick operations in real time. 264ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown */ 274ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brownpublic final class DisplayThread extends ServiceThread { 284ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown private static DisplayThread sInstance; 294ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown private static Handler sHandler; 304ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 314ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown private DisplayThread() { 324ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown super("android.display", android.os.Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/); 334ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown } 344ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 354ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown private static void ensureThreadLocked() { 364ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown if (sInstance == null) { 374ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown sInstance = new DisplayThread(); 384ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown sInstance.start(); 394ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown sHandler = new Handler(sInstance.getLooper()); 404ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown } 414ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown } 424ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 434ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown public static DisplayThread get() { 44bf58d9b727f1007c7c620f622ac1d8003b1b211bJeff Brown synchronized (DisplayThread.class) { 454ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown ensureThreadLocked(); 464ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown return sInstance; 474ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown } 484ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown } 494ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 504ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown public static Handler getHandler() { 51bf58d9b727f1007c7c620f622ac1d8003b1b211bJeff Brown synchronized (DisplayThread.class) { 524ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown ensureThreadLocked(); 534ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown return sHandler; 544ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown } 554ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown } 564ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown} 57