diff --git a/tests/UiBench/AndroidManifest.xml b/tests/UiBench/AndroidManifest.xml
index b7b4894bbdd99..29154aa8dcaf1 100644
--- a/tests/UiBench/AndroidManifest.xml
+++ b/tests/UiBench/AndroidManifest.xml
@@ -102,10 +102,18 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
{
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ final long start = System.nanoTime();
+
+ final float density = parent.getResources().getDisplayMetrics().density;
+ View view = new View(parent.getContext()) {
+ @Override
+ protected void onAttachedToWindow() {
+ final long start = System.nanoTime();
+ super.onAttachedToWindow();
+ while (System.nanoTime() - start < INNER_ITEM_ATTACH_NS);
+ }
+ };
+
+ SizeData sizeData = getSizeData(parent.getResources());
+ view.setMinimumWidth(sizeData.innerItemWidth);
+ view.setMinimumHeight(sizeData.innerItemHeight);
+
+ GradientDrawable bg = new GradientDrawable();
+ bg.setCornerRadius(10 * density);
+ bg.setColor(Color.BLACK);
+ final int pad = (int)(10 * density);
+ view.setPadding(pad, pad, pad, pad);
+ view.setBackgroundDrawable(new InsetDrawable(bg, pad));
+ RecyclerView.ViewHolder holder = new RecyclerView.ViewHolder(view) {};
+
+ while (System.nanoTime() - start < INNER_ITEM_CREATE_NS);
+ return holder;
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ final long start = System.nanoTime();
+ while (System.nanoTime() - start < INNER_ITEM_BIND_NS);
+ }
+
+ @Override
+ public int getItemCount() { return INNER_ITEM_COUNT; }
+ }
+
+ private class OuterAdapter extends RecyclerView.Adapter {
+ static final int TYPE_HEADER = 0;
+ static final int TYPE_RECYCLER = 1;
+
+ ArrayList mAdapters = new ArrayList<>();
+ RecyclerView.RecycledViewPool mSharedPool = new RecyclerView.RecycledViewPool();
+
+ OuterAdapter() {
+ for (int i = 0; i < OUTER_ITEM_COUNT; i++) {
+ mAdapters.add(new InnerAdapter());
+ }
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ SizeData sizeData = getSizeData(parent.getResources());
+ if (viewType == TYPE_HEADER) {
+ View view = new View(parent.getContext());
+ view.setMinimumHeight(sizeData.headerHeight);
+ return new RecyclerView.ViewHolder(view) {};
+ } else {
+ final long start = System.nanoTime();
+
+ RecyclerView rv = new RecyclerView(parent.getContext()) {
+ @Override
+ protected void onAttachedToWindow() {
+ final long start = System.nanoTime();
+ super.onAttachedToWindow();
+ while (System.nanoTime() - start < OUTER_ITEM_ATTACH_NS);
+
+ }
+ };
+
+ rv.setLayoutParams(new RecyclerView.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, sizeData.innerItemHeight));
+ rv.setLayoutManager(new LinearLayoutManager(parent.getContext(),
+ LinearLayoutManager.HORIZONTAL, false));
+ rv.setRecycledViewPool(mSharedPool);
+ RecyclerView.ViewHolder holder = new RecyclerView.ViewHolder(rv) {};
+
+ while (System.nanoTime() - start < OUTER_ITEM_CREATE_NS);
+ return holder;
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ if (getItemViewType(position) == TYPE_RECYCLER) {
+ final long start = System.nanoTime();
+ ((RecyclerView)holder.itemView).setAdapter(mAdapters.get(position));
+ while (System.nanoTime() - start < OUTER_ITEM_BIND_NS);
+ }
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return position == 0 ? TYPE_HEADER : TYPE_RECYCLER;
+ }
+
+ @Override
+ public int getItemCount() {
+ return mAdapters.size();
+ }
+ }
+}