|
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 |
}
|