158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik/* 258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * Copyright (C) 2016 The Android Open Source Project 358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * 458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * you may not use this file except in compliance with the License. 658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * You may obtain a copy of the License at 758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * 858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * 1058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * Unless required by applicable law or agreed to in writing, software 1158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 1258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * See the License for the specific language governing permissions and 1458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * limitations under the License. 1558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik */ 1658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikpackage com.android.test.uibench; 1758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik 1858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.content.Context; 1958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.os.Trace; 2058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.support.v7.widget.GridLayoutManager; 2158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.support.v7.widget.RecyclerView; 2258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport com.android.test.uibench.recyclerview.RvBoxAdapter; 2358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport com.android.test.uibench.recyclerview.RvCompatListActivity; 2458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik 2558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport java.util.concurrent.TimeUnit; 2658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik 2758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikpublic class SlowBindRecyclerViewActivity extends RvCompatListActivity { 2858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik /** 2958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * Spin wait. Used instead of sleeping so a core is used up for the duration, and so 3058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * traces/sampled profiling show the sections as expensive, and not just a scheduling mistake. 3158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik */ 3258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik private static void spinWaitMs(long ms) { 3358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik long start = System.nanoTime(); 3458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik while (System.nanoTime() - start < TimeUnit.MILLISECONDS.toNanos(ms)); 3558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik } 3658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik 3758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik @Override 3858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik protected RecyclerView.LayoutManager createLayoutManager(Context context) { 3958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik return new GridLayoutManager(context, 3); 4058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik } 4158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik 4258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik @Override 4358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik protected RecyclerView.Adapter createAdapter() { 4458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik return new RvBoxAdapter(this, TextUtils.buildSimpleStringList()) { 4558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik @Override 4658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik public void onBindViewHolder(ViewHolder holder, int position) { 4758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik Trace.beginSection("bind item " + position); 4858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik 4958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik spinWaitMs(3); 5058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik super.onBindViewHolder(holder, position); 5158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik Trace.endSection(); 5258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik } 5358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik }; 5458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik } 5558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik} 56