DisplayList.java revision 65b345fa22b878e141b8fd8ece9c208df00fa40f
1b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/*
2b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Copyright (C) 2010 The Android Open Source Project
3b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy *
4b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * you may not use this file except in compliance with the License.
6b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * You may obtain a copy of the License at
7b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy *
8b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy *
10b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Unless required by applicable law or agreed to in writing, software
11b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * See the License for the specific language governing permissions and
14b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * limitations under the License.
15b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */
16b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
17b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guypackage android.view;
18b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
19b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/**
20b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * A display lists records a series of graphics related operation and can replay
21b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * them later. Display lists are usually built by recording operations on a
22b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * {@link android.graphics.Canvas}. Replaying the operations from a display list
23b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * avoids executing views drawing code on every frame, and is thus much more
24daf98e941e140e8739458126640183b9f296a2abChet Haase * efficient.
25daf98e941e140e8739458126640183b9f296a2abChet Haase *
26daf98e941e140e8739458126640183b9f296a2abChet Haase * @hide
27b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */
28daf98e941e140e8739458126640183b9f296a2abChet Haasepublic abstract class DisplayList {
29b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    /**
30b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     * Starts recording the display list. All operations performed on the
31b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     * returned canvas are recorded and stored in this display list.
32b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     *
33b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     * @return A canvas to record drawing operations.
34b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     */
35b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    abstract HardwareCanvas start();
36b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
37b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    /**
38b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     * Ends the recording for this display list. A display list cannot be
39b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     * replayed if recording is not finished.
40b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy     */
41b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    abstract void end();
42b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
43b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    /**
449e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     * Invalidates the display list, indicating that it should be repopulated
459e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     * with new drawing commands prior to being used again. Calling this method
469e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     * causes calls to {@link #isValid()} to return <code>false</code>.
479e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     */
489e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase    abstract void invalidate();
499e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase
509e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase    /**
519e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     * Returns whether the display list is currently usable. If this returns false,
529e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     * the display list should be re-recorded prior to replaying it.
539e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     *
549e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     * @return boolean true if the display list is able to be replayed, false otherwise.
559e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase     */
569e90a9953b65ae575ec8db3989857e0c145724b1Chet Haase    abstract boolean isValid();
5765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy
5865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy    /**
5965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy     * Return the amount of memory used by this display list.
6065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy     *
6165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy     * @return The size of this display list in bytes
6265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy     */
6365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy    abstract int getSize();
64b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
65