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(); + } + } +}