1ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi/* 2ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * Copyright (C) 2017 The Android Open Source Project 3ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * 4ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License"); 5ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * you may not use this file except in compliance with the License. 6ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * You may obtain a copy of the License at 7ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * 8ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * http://www.apache.org/licenses/LICENSE-2.0 9ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * 10ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * Unless required by applicable law or agreed to in writing, software 11ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS, 12ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * See the License for the specific language governing permissions and 14ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi * limitations under the License 15ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi */ 16ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 17ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggipackage com.android.server; 18ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 19ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggiimport static android.os.Process.THREAD_PRIORITY_DISPLAY; 20ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 21ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggiimport android.os.Handler; 22ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggiimport android.os.Trace; 23ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 24ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi/** 2521c39a77712d494f0ec8980a39dc99ff98c46c37Jorim Jaggi * Thread for handling all legacy window animations, or anything that's directly impacting 2621c39a77712d494f0ec8980a39dc99ff98c46c37Jorim Jaggi * animations like starting windows or traversals. 27ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi */ 28ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggipublic final class AnimationThread extends ServiceThread { 29ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi private static AnimationThread sInstance; 30ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi private static Handler sHandler; 31ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 32ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi private AnimationThread() { 33ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi super("android.anim", THREAD_PRIORITY_DISPLAY, false /*allowIo*/); 34ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi } 35ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 36ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi private static void ensureThreadLocked() { 37ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi if (sInstance == null) { 38ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi sInstance = new AnimationThread(); 39ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi sInstance.start(); 40ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi sInstance.getLooper().setTraceTag(Trace.TRACE_TAG_WINDOW_MANAGER); 41ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi sHandler = new Handler(sInstance.getLooper()); 42ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi } 43ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi } 44ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 45ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi public static AnimationThread get() { 46ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi synchronized (AnimationThread.class) { 47ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi ensureThreadLocked(); 48ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi return sInstance; 49ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi } 50ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi } 51ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi 52ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi public static Handler getHandler() { 53ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi synchronized (AnimationThread.class) { 54ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi ensureThreadLocked(); 55ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi return sHandler; 56ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi } 57ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi } 58ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi} 59