Package org.apache.etch.examples.perf

Source Code of org.apache.etch.examples.perf.MainPerfClient

/* $Id: MainPerfClient.java 743147 2009-02-10 22:53:01Z sccomer $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.etch.examples.perf;

import java.util.Date;

import org.apache.etch.bindings.java.support.Mailbox;
import org.apache.etch.bindings.java.support.ServerFactory;
import org.apache.etch.examples.perf.Perf.Point;
import org.apache.etch.examples.perf.PerfHelper.PerfClientFactory;
import org.apache.etch.examples.perf.PerfHelper.PerfServerFactory;
import org.apache.etch.util.Assertion;
import org.apache.etch.util.Log;
import org.apache.etch.util.PerfTest;
import org.apache.etch.util.core.io.Transport;


/**
* Main program for PerfClient. This program makes a connection to the listener
* created by MainPerfListener.
*/
public class MainPerfClient implements PerfClientFactory, PerfServerFactory
{
  private static String uri;

  private static int maxWaitTime;

  private static int runtime;

  private static int trials;

  private static boolean full;

  private static int[] threadCounts;

  private static boolean startListener;

  private static MainPerfClient implFactory;

  /**
   * Main program for PerfClient.
   *
   * @param args
   * @throws Exception
   */
  public static void main( String[] args ) throws Exception
  {
    Log.addSink( null );
    Log.report( "MainPerfClient" );

    uri = "tcp://localhost:4004";
    maxWaitTime = 4000;
    runtime = 4;
    trials = 3;
    full = false;
    threadCounts = new int[]
    {
      1
    };
    startListener = args.length == 1 && args[0].equals( "startListener" );

    implFactory = new MainPerfClient();

    final ServerFactory listener;

    if (startListener)
    {
      listener = PerfHelper.newListener( uri, null, implFactory );
      listener.transportControl( Transport.START_AND_WAIT_UP, maxWaitTime );
    }
    else
    {
      listener = null;
    }

    // make sure test interfaces work.
   
    qualify();

    // run tests

    for (int nThreads : threadCounts)
    {
      perfAdd( nThreads );
      perfAsyncAdd( nThreads );
      perfReport( nThreads );
      if (full)
      {
        perfSum( nThreads );
        perfDist( nThreads );
        perfAdd2( nThreads );
        perfReport2( nThreads );
      }
    }

    if (listener != null)
      listener.transportControl( Transport.STOP_AND_WAIT_DOWN, maxWaitTime );
  }

  private static void perfReport2( int threads ) throws Exception
  {
    new PerfTest( "report2", runtime, trials, threads )
    {
      @Override
      public void run( long n ) throws Exception
      {
        RemotePerfServer server = startServer();
       
        final Date d = new Date();
       
        while (n-- > 0)
          server
            .report2( d, 23,
            // 50 characters:
              "this message describes the specifics of a code 23." );

        // sync up with message stream.
        Assertion.check( server.add( 8, 9 ) == 17,
          "server.add( 8, 9 ) == 17" );

        stopServer( server );
      }
    }.run();
  }

  private static void perfAdd2( int threads ) throws Exception
  {
    new PerfTest( "add2", runtime, trials, threads )
    {
      @Override
      public void run( long n ) throws Exception
      {
        RemotePerfServer server = startServer();

        final Date d = new Date();
        final long adj = 3600000L; // 1 hour

        while (n-- > 0)
          server.add2( d, adj );

        stopServer( server );
      }
    }.run();
  }

  private static void perfDist( int threads ) throws Exception
  {
    new PerfTest( "dist", runtime, trials, threads )
    {
      @Override
      public void run( long n ) throws Exception
      {
        RemotePerfServer server = startServer();
       
        final int X = 1000000000;
        final int Y = 2000000000;

        while (n-- > 0)
          server.dist( new Point( 1, 2 ), new Point( X, Y ) );

        stopServer( server );
      }
    }.run();
  }

  private static void perfSum( int threads ) throws Exception
  {
    final int[] values = new int[1000];
    for (int i = 0; i < values.length; i++)
      values[i] = i;

    new PerfTest( "sum-" + values.length, runtime, trials, threads )
    {
      @Override
      public void run( long n ) throws Exception
      {
        RemotePerfServer server = startServer();

        while (n-- > 0)
          server.sum( values );

        stopServer( server );
      }
    }.run();
  }

  private static void perfReport( int threads ) throws Exception
  {
    new PerfTest( "report", runtime, trials, threads )
    {
      @Override
      public void run( long n ) throws Exception
      {
        RemotePerfServer server = startServer();

        while (n-- > 0)
          server.report( 23,
          // 50 characters:
            "this message describes the specifics of a code 23." );

        // sync up with message stream.
        Assertion.check( server.add( 8, 9 ) == 17,
          "server.add( 8, 9 ) == 17" );

        stopServer( server );
      }
    }.run();
  }

  private static void perfAsyncAdd( int threads ) throws Exception
  {
    new PerfTest( "async add", runtime, trials, threads )
    {
      @Override
      public void run( long n ) throws Exception
      {
        RemotePerfServer server = startServer();
       
        final int X = 1000000000;
        final int Y = 2000000000;

        if (n-- > 0)
        {
          Mailbox mb1 = server._async._begin_add( X, Y );
          while (n-- > 0)
          {
            Mailbox mb2 = server._async._begin_add( X, Y );
            server._async._end_add( mb1 );
            mb1 = mb2;
          }
          server._async._end_add( mb1 );
        }

        stopServer( server );
      }
    }.run();
  }

  private static void perfAdd( int threads ) throws Exception
  {
    new PerfTest( "add", runtime, trials, threads )
    {
      @Override
      public void run( long n ) throws Exception
      {
        RemotePerfServer server = startServer();
       
        final int X = 1000000000;
        final int Y = 2000000000;

        while (n-- > 0)
          server.add( X, Y );

        stopServer( server );
      }
    }.run();
  }

  private static RemotePerfServer startServer() throws Exception
  {
    RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
    server._startAndWaitUp( maxWaitTime );
    return server;
  }

  private static void stopServer( RemotePerfServer server ) throws Exception
  {
    server._stopAndWaitDown( maxWaitTime );
  }

  private static void qualify() throws Exception
  {
    RemotePerfServer server = startServer();

    Assertion.check( server.add( 2, 3 ) == 5, "server.add( 2, 3 ) == 5" );

    Assertion.check( server.add( 3, 4 ) == 7, "server.add( 3, 4 ) == 7" );

    Assertion.check( server.sum( new int[]
    {
      1, 2, 3
    } ) == 6, "server.sum( new int[] { 1, 2, 3 } ) == 6" );

    Assertion.check( server.sum( new int[]
    {
      2, 3, 4
    } ) == 9, "server.sum( new int[] { 2, 3, 4 } ) == 9" );

    server.report( 18, "starting" );

    server.report( 19, "stopping" );

    Point r = server.dist( new Point( 1, 2 ), new Point( 3, 5 ) );
    Assertion.check( r.x == 2, "r.x == 2" );
    Assertion.check( r.y == 3, "r.y == 3" );

    r = server.dist( new Point( 10, 9 ), new Point( 4, 5 ) );
    Assertion.check( r.x == -6, "r.x == -6" );
    Assertion.check( r.y == -4, "r.y == -4" );

    Date t0 = new Date();
    long adj = 3600000L;

    Date t1 = server.add2( t0, adj );
    Assertion.check( t1.getTime() - t0.getTime() == adj, String.format(
      "server.add2( %s, %s ) => %s [bogus!]", t0, adj, t1 ) );

    t1 = server.add2( t0, -adj );
    Assertion.check( t1.getTime() - t0.getTime() == -adj, String.format(
      "server.add2( %s, %s ) => %s [bogus!]", t0, -adj, t1 ) );

    server.report2( new Date(), 20, "begin" );

    server.report2( new Date(), 21, "end" );

    stopServer( server );
  }

  public PerfClient newPerfClient( RemotePerfServer server ) throws Exception
  {
    return new ImplPerfClient( server );
  }

  public PerfServer newPerfServer( RemotePerfClient client ) throws Exception
  {
    return new ImplPerfServer( client );
  }
}
TOP

Related Classes of org.apache.etch.examples.perf.MainPerfClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.