Blame tests/Performance/Container/PerfCntnr3.c

Packit b099d7
/* $XConsortium: PerfCntnr3.c /main/6 1996/10/07 15:10:13 drk $ */
Packit b099d7
/*
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 * 
Packit b099d7
 */
Packit b099d7
/*
Packit b099d7
 * HISTORY
Packit b099d7
 */
Packit b099d7
Packit b099d7
#include <stdio.h>
Packit b099d7
#include <sys/time.h>
Packit b099d7
Packit b099d7
#include <testlib.h>
Packit b099d7
Packit b099d7
#define NUM_OBJ 1000
Packit b099d7
Packit b099d7
void IncrBottomCB(Widget, XtPointer, XtPointer);
Packit b099d7
void DecrTopCB(Widget, XtPointer, XtPointer);
Packit b099d7
void IncrRightCB(Widget, XtPointer, XtPointer);
Packit b099d7
void DecrLeftCB(Widget, XtPointer, XtPointer);
Packit b099d7
Packit b099d7
static void     PrintLapseTime();
Packit b099d7
Packit b099d7
struct timeval  incr_to_bottom_time[2];
Packit b099d7
struct timeval  decr_to_top_time[2];
Packit b099d7
struct timeval  incr_to_right_time[2];
Packit b099d7
struct timeval  decr_to_left_time[2];
Packit b099d7
Packit b099d7
Packit b099d7
void Quit(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
Packit b099d7
    printf("Time elapsed to scroll to the bottom:\n");
Packit b099d7
    PrintLapseTime(&incr_to_bottom_time[0], &incr_to_bottom_time[1]);
Packit b099d7
    printf("Time elapsed to scroll to the top:\n");
Packit b099d7
    PrintLapseTime(&decr_to_top_time[0], &decr_to_top_time[1]);
Packit b099d7
    printf("Time elapsed to scroll to the right:\n");
Packit b099d7
    PrintLapseTime(&incr_to_right_time[0], &incr_to_right_time[1]);
Packit b099d7
    printf("Time elapsed to scroll to the left:\n");
Packit b099d7
    PrintLapseTime(&decr_to_left_time[0], &decr_to_left_time[1]);
Packit b099d7
Packit b099d7
    printf("Begin exiting ... please standby ... \n");
Packit b099d7
    exit(0);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
void
Packit b099d7
main(int argc, char **argv)
Packit b099d7
{
Packit b099d7
    
Packit b099d7
    Widget		ScrolledW, Frame, Container, *IconGad;
Packit b099d7
    int			i;
Packit b099d7
    Cardinal		n, num_obj;
Packit b099d7
    Arg			args[MAX_ARGS];
Packit b099d7
    Cardinal            test_num;
Packit b099d7
    char                IconName[20] ;
Packit b099d7
	Widget	VertScrollB, HorizScrollB;
Packit b099d7
	int	VertMax, HorizMax, VertMin, HorizMin, VertIncr, HorizIncr;
Packit b099d7
Packit b099d7
    CommonTestInit(argc, argv);
Packit b099d7
Packit b099d7
    test_num = 0;
Packit b099d7
    num_obj = NUM_OBJ;
Packit b099d7
    
Packit b099d7
    if (UserData != NULL) {
Packit b099d7
	
Packit b099d7
	if (strcmp(UserData, "noscroll") == 0)
Packit b099d7
	    test_num = 1;
Packit b099d7
	else {
Packit b099d7
	    n = atoi(UserData);
Packit b099d7
	    if (n < num_obj)
Packit b099d7
	      num_obj = n;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	free(UserData);
Packit b099d7
	
Packit b099d7
    }
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight, 320); n++;
Packit b099d7
    XtSetArg(args[n], XmNwidth, 340); n++;
Packit b099d7
    XtSetValues(Shell1, args, n);
Packit b099d7
Packit b099d7
    /* We want a scrolledwindow because the container window
Packit b099d7
       can potentially be huge. If we don't want a scrolled 
Packit b099d7
       window run it with -u noscroll */
Packit b099d7
Packit b099d7
    if (test_num != 1) {
Packit b099d7
Packit b099d7
       n = 0;
Packit b099d7
       XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); n++;
Packit b099d7
       ScrolledW = XmCreateScrolledWindow(Shell1, "ScrolledW", args, n);
Packit b099d7
       XtManageChild(ScrolledW);
Packit b099d7
    
Packit b099d7
       /* but we don't want interaction with the scrolling header */
Packit b099d7
       n = 0;
Packit b099d7
       Frame= XmCreateFrame(ScrolledW, "Frame", args, n);
Packit b099d7
       XtManageChild(Frame);
Packit b099d7
    
Packit b099d7
       n = 0;
Packit b099d7
       Container= XmCreateContainer(Frame, "Container", args, n);
Packit b099d7
	VertScrollB = XtNameToWidget(ScrolledW, "VertScrollBar");
Packit b099d7
	HorizScrollB = XtNameToWidget(ScrolledW, "HorScrollBar");
Packit b099d7
Packit b099d7
	XtAddCallback(VertScrollB, XmNincrementCallback, IncrBottomCB, (XtPointer)&VertMax);
Packit b099d7
	XtAddCallback(VertScrollB, XmNdecrementCallback, DecrTopCB, (XtPointer)&VertMin);
Packit b099d7
	XtAddCallback(HorizScrollB, XmNincrementCallback, IncrRightCB, (XtPointer)&HorizMax);
Packit b099d7
	XtAddCallback(HorizScrollB, XmNdecrementCallback, DecrLeftCB, (XtPointer)&HorizMin);
Packit b099d7
    }
Packit b099d7
    else {
Packit b099d7
       n = 0;
Packit b099d7
       Container= XmCreateContainer(Shell1, "Container", args, n);
Packit b099d7
    }
Packit b099d7
      
Packit b099d7
    XtManageChild(Container);
Packit b099d7
	XtAddCallback(Container, XmNselectionCallback, Quit, NULL);
Packit b099d7
    
Packit b099d7
    IconGad = (Widget*) XtMalloc(num_obj*sizeof(Widget));
Packit b099d7
Packit b099d7
    for (i = 0; i < num_obj; i++) {
Packit b099d7
	
Packit b099d7
	sprintf(IconName,"IconGad%d", i);
Packit b099d7
	IconGad[i] = XmCreateIconGadget(Container, IconName, args, 0);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    XtManageChildren(IconGad, num_obj);
Packit b099d7
Packit b099d7
    XtRealizeWidget(Shell1);
Packit b099d7
Packit b099d7
    incr_to_bottom_time[0].tv_sec = 0;
Packit b099d7
    decr_to_top_time[0].tv_sec = 0;
Packit b099d7
    incr_to_bottom_time[0].tv_sec = 0;
Packit b099d7
    incr_to_bottom_time[0].tv_sec = 0;
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    XtAppMainLoop(app_context);
Packit b099d7
    
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
void IncrBottomCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
Packit b099d7
    struct  timezone    tz;
Packit b099d7
	XmScrollBarCallbackStruct *cb = (XmScrollBarCallbackStruct *)call_data;
Packit b099d7
	/* printf("cb->value = %d\n", cb->value); */
Packit b099d7
	if (cb->value == 1539) {
Packit b099d7
        gettimeofday(&incr_to_bottom_time[1],&tz;;
Packit b099d7
    } else {
Packit b099d7
        if (incr_to_bottom_time[0].tv_sec == 0)
Packit b099d7
            gettimeofday(&incr_to_bottom_time[0],&tz;;
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
void DecrTopCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
Packit b099d7
	struct  timezone    tz;
Packit b099d7
	XmScrollBarCallbackStruct *cb = (XmScrollBarCallbackStruct *)call_data;
Packit b099d7
	/* printf("cb->value = %d\n", cb->value); */
Packit b099d7
	if (cb->value == 0) {
Packit b099d7
        gettimeofday(&decr_to_top_time[1],&tz;;
Packit b099d7
    } else {
Packit b099d7
        if (decr_to_top_time[0].tv_sec == 0)
Packit b099d7
            gettimeofday(&decr_to_top_time[0],&tz;;
Packit b099d7
	}
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
void IncrRightCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
Packit b099d7
	struct  timezone    tz;
Packit b099d7
	XmScrollBarCallbackStruct *cb = (XmScrollBarCallbackStruct *)call_data;
Packit b099d7
	/* printf("cb->value = %d\n", cb->value); */
Packit b099d7
	if (cb->value == 1999) {
Packit b099d7
        gettimeofday(&incr_to_right_time[1],&tz;;
Packit b099d7
    } else {
Packit b099d7
        if (incr_to_right_time[0].tv_sec == 0)
Packit b099d7
            gettimeofday(&incr_to_right_time[0],&tz;;
Packit b099d7
	}
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
void DecrLeftCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
Packit b099d7
	struct  timezone    tz;
Packit b099d7
	XmScrollBarCallbackStruct *cb = (XmScrollBarCallbackStruct *)call_data;
Packit b099d7
	/* printf("cb->value = %d\n", cb->value); */
Packit b099d7
	if (cb->value == 0) {
Packit b099d7
        gettimeofday(&decr_to_left_time[1],&tz;;
Packit b099d7
    } else {
Packit b099d7
        if (decr_to_left_time[0].tv_sec == 0)
Packit b099d7
            gettimeofday(&decr_to_left_time[0],&tz;;
Packit b099d7
	}
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
static void PrintLapseTime(first,second)
Packit b099d7
struct timeval *first, *second;
Packit b099d7
{
Packit b099d7
     struct timeval lapsed;
Packit b099d7
Packit b099d7
     if (first->tv_usec > second->tv_usec) {
Packit b099d7
        second->tv_usec += 1000000;
Packit b099d7
        second->tv_sec--;
Packit b099d7
     }
Packit b099d7
Packit b099d7
     lapsed.tv_usec = second->tv_usec - first->tv_usec;
Packit b099d7
     lapsed.tv_sec = second->tv_sec - first->tv_sec;
Packit b099d7
Packit b099d7
     printf("lapsed time = %ld.%06d sec\n\n",
Packit b099d7
            (long)lapsed.tv_sec, lapsed.tv_usec%1000000);
Packit b099d7
     fflush(stdout);
Packit b099d7
Packit b099d7
}