/* * Copyright 2016 Kejun Xia * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.shipdream.lib.android.mvc.samples.benchmark; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.shipdream.lib.android.mvc.MvcGraph; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller0; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller1; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller2; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller3; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller4; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller5; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller6; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller7; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller8; import com.shipdream.lib.android.mvc.samples.benchmark.controller.Controller9; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller0Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller1Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller2Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller3Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller4Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller5Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller6Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller7Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller8Impl; import com.shipdream.lib.android.mvc.samples.benchmark.controller.internal.Controller9Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service0; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service1; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service2; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service3; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service4; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service5; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service6; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service7; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service8; import com.shipdream.lib.android.mvc.samples.benchmark.service.Service9; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service0Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service1Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service2Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service3Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service4Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service5Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service6Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service7Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service8Impl; import com.shipdream.lib.android.mvc.samples.benchmark.service.internal.Service9Impl; import com.shipdream.lib.poke.ProviderByClassType; import com.shipdream.lib.poke.exception.ProviderConflictException; import javax.inject.Inject; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); final TextView textDagger10 = (TextView) findViewById(R.id.text_dagger_inject10); final TextView textPokePattern10 = (TextView) findViewById(R.id.text_poke_pattern_inject10); final TextView textPokeRegistry10 = (TextView) findViewById(R.id.text_poke_registry_inject10); final TextView textDagger10x10 = (TextView) findViewById(R.id.text_dagger_inject10x10); final TextView textPokePattern10x10 = (TextView) findViewById(R.id.text_poke_pattern_inject10x10); final TextView textPokeRegistry10x10 = (TextView) findViewById(R.id.text_poke_registry_inject10x10); findViewById(R.id.button_dagger_inject10).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Container10 container = new Container10(); long ts = System.currentTimeMillis(); ControllerComponent comp = DaggerControllerComponent.builder().controllerModule(new ControllerModule()).build(); comp.inject(container); long elapsed = System.currentTimeMillis() - ts; textDagger10.setText(String.format("Dagger inject 10 fields used %dms", elapsed)); } }); findViewById(R.id.button_dagger_inject10x10).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Container10x10 container = new Container10x10(); long ts = System.currentTimeMillis(); ControllerComponent comp = DaggerControllerComponent.builder().controllerModule(new ControllerModule()).build(); comp.inject(container); comp.inject((Controller0Impl)container.controller0); comp.inject((Controller1Impl)container.controller1); comp.inject((Controller2Impl)container.controller2); comp.inject((Controller3Impl)container.controller3); comp.inject((Controller4Impl)container.controller4); comp.inject((Controller5Impl)container.controller5); comp.inject((Controller6Impl)container.controller6); comp.inject((Controller7Impl)container.controller7); comp.inject((Controller8Impl)container.controller8); comp.inject((Controller9Impl)container.controller9); long elapsed = System.currentTimeMillis() - ts; textDagger10x10.setText(String.format("Dagger inject 10x10 nested fields used %dms", elapsed)); } }); findViewById(R.id.button_poke_registry_inject10).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Container10 container = new Container10(); long ts = System.currentTimeMillis(); try { MvcGraph graph = new MvcGraph(); register(graph, Service0.class, Service0Impl.class); register(graph, Service1.class, Service1Impl.class); register(graph, Service2.class, Service2Impl.class); register(graph, Service3.class, Service3Impl.class); register(graph, Service4.class, Service4Impl.class); register(graph, Service5.class, Service5Impl.class); register(graph, Service6.class, Service6Impl.class); register(graph, Service7.class, Service7Impl.class); register(graph, Service8.class, Service8Impl.class); register(graph, Service9.class, Service9Impl.class); graph.inject(container); } catch (Exception e) { throw new RuntimeException(e); } long elapsed = System.currentTimeMillis() - ts; textPokeRegistry10.setText(String.format("Poke inject 10 fields by registry used %dms", elapsed)); } }); findViewById(R.id.button_poke_registry_inject10x10).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Container10x10 container = new Container10x10(); long ts = System.currentTimeMillis(); try { MvcGraph graph = new MvcGraph(); register(graph, Controller0.class, Controller0Impl.class); register(graph, Controller1.class, Controller1Impl.class); register(graph, Controller2.class, Controller2Impl.class); register(graph, Controller3.class, Controller3Impl.class); register(graph, Controller4.class, Controller4Impl.class); register(graph, Controller5.class, Controller5Impl.class); register(graph, Controller6.class, Controller6Impl.class); register(graph, Controller7.class, Controller7Impl.class); register(graph, Controller8.class, Controller8Impl.class); register(graph, Controller9.class, Controller9Impl.class); register(graph, Service0.class, Service0Impl.class); register(graph, Service1.class, Service1Impl.class); register(graph, Service2.class, Service2Impl.class); register(graph, Service3.class, Service3Impl.class); register(graph, Service4.class, Service4Impl.class); register(graph, Service5.class, Service5Impl.class); register(graph, Service6.class, Service6Impl.class); register(graph, Service7.class, Service7Impl.class); register(graph, Service8.class, Service8Impl.class); register(graph, Service9.class, Service9Impl.class); graph.inject(container); } catch (Exception e) { throw new RuntimeException(e); } long elapsed = System.currentTimeMillis() - ts; textPokeRegistry10x10.setText(String.format("Poke inject 10x10 nested fields by registry used %dms", elapsed)); } }); findViewById(R.id.button_poke_pattern_inject10).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Container10 container = new Container10(); long ts = System.currentTimeMillis(); try { new MvcGraph().inject(container); } catch (Exception e) { throw new RuntimeException(e); } long elapsed = System.currentTimeMillis() - ts; textPokePattern10.setText(String.format("Poke inject 10 fields by pattern used %dms", elapsed)); } }); findViewById(R.id.button_poke_pattern_inject10x10).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Container10x10 container = new Container10x10(); long ts = System.currentTimeMillis(); try { new MvcGraph().inject(container); } catch (Exception e) { throw new RuntimeException(e); } long elapsed = System.currentTimeMillis() - ts; textPokePattern10x10.setText(String.format("Poke inject 10x10 nested fields by pattern used %dms", elapsed)); } }); } private void register(MvcGraph graph, Class type, Class impl) throws ProviderConflictException { graph.getRootComponent().register(new ProviderByClassType(type, impl)); } public static class Container10 { @Inject Service0 service0; @Inject Service1 service1; @Inject Service2 service2; @Inject Service3 service3; @Inject Service4 service4; @Inject Service5 service5; @Inject Service6 service6; @Inject Service7 service7; @Inject Service8 service8; @Inject Service9 service9; } public static class Container10x10 { @Inject Controller0 controller0; @Inject Controller1 controller1; @Inject Controller2 controller2; @Inject Controller3 controller3; @Inject Controller4 controller4; @Inject Controller5 controller5; @Inject Controller6 controller6; @Inject Controller7 controller7; @Inject Controller8 controller8; @Inject Controller9 controller9; } }