19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.widget;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Paint;
232191418305ca42e4f219020a02f16c045c539755Siyamed Sinirimport android.support.test.InstrumentationRegistry;
242191418305ca42e4f219020a02f16c045c539755Siyamed Sinirimport android.support.test.filters.MediumTest;
252191418305ca42e4f219020a02f16c045c539755Siyamed Sinirimport android.support.test.filters.SmallTest;
262191418305ca42e4f219020a02f16c045c539755Siyamed Sinirimport android.support.test.runner.AndroidJUnit4;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.SpannedString;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
312191418305ca42e4f219020a02f16c045c539755Siyamed Sinirimport org.junit.Before;
322191418305ca42e4f219020a02f16c045c539755Siyamed Sinirimport org.junit.Test;
332191418305ca42e4f219020a02f16c045c539755Siyamed Sinirimport org.junit.runner.RunWith;
342191418305ca42e4f219020a02f16c045c539755Siyamed Sinir
352191418305ca42e4f219020a02f16c045c539755Siyamed Sinir@RunWith(AndroidJUnit4.class)
362191418305ca42e4f219020a02f16c045c539755Siyamed Sinirpublic class TextViewPerformanceTest {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mString = "The quick brown fox";
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Canvas mCanvas;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private PerformanceTextView mTextView;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Paint mPaint;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private PerformanceLabelView mLabelView;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
442191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    @Before
452191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    public void setUp() {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Bitmap mBitmap = Bitmap.createBitmap(320, 240, Bitmap.Config.RGB_565);
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCanvas = new Canvas(mBitmap);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ViewGroup.LayoutParams p = new ViewGroup.LayoutParams(320, 240);
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
512191418305ca42e4f219020a02f16c045c539755Siyamed Sinir        final Context context = InstrumentationRegistry.getContext();
522191418305ca42e4f219020a02f16c045c539755Siyamed Sinir
532191418305ca42e4f219020a02f16c045c539755Siyamed Sinir        mLabelView = new PerformanceLabelView(context);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLabelView.setText(mString);
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLabelView.measure(View.MeasureSpec.AT_MOST | 320, View.MeasureSpec.AT_MOST | 240);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLabelView.mySetFrame(320, 240);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLabelView.setLayoutParams(p);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLabelView.myDraw(mCanvas);
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPaint = new Paint();
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCanvas.save();
622191418305ca42e4f219020a02f16c045c539755Siyamed Sinir        mTextView = new PerformanceTextView(context);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.setLayoutParams(p);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.setText(mString);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.mySetFrame(320, 240);
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.measure(View.MeasureSpec.AT_MOST | 320, View.MeasureSpec.AT_MOST | 240);
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @MediumTest
702191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    @Test
712191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    public void testDrawTextViewLine() {
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
852191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    @Test
862191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    public void testSpan() {
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CharSequence charSeq = new SpannedString(mString);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.setText(charSeq);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextView.myDraw(mCanvas);
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1032191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    @Test
1042191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    public void testCanvasDrawText() {
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCanvas.drawText(mString, 30, 30, mPaint);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1092191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    @Test
1102191418305ca42e4f219020a02f16c045c539755Siyamed Sinir    public void testLabelViewDraw() {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLabelView.myDraw(mCanvas);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private class PerformanceTextView extends TextView {
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PerformanceTextView(Context context) {
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super(context);
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final void myDraw(Canvas c) {
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super.onDraw(c);
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final void mySetFrame(int w, int h) {
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super.setFrame(0, 0, w, h);
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private class PerformanceLabelView extends LabelView {
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public PerformanceLabelView(Context context) {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super(context);
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final void myDraw(Canvas c) {
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super.onDraw(c);
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final void mySetFrame(int w, int h) {
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super.setFrame(0, 0, w, h);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
142