Blame bus/test-stress.c

Packit Service 1d8f1c
/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
Packit Service 1d8f1c
/* vim:set et sts=4: */
Packit Service 1d8f1c
/* bus - The Input Bus
Packit Service 1d8f1c
 * Copyright (C) 2010 Google Inc.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * This library is free software; you can redistribute it and/or
Packit Service 1d8f1c
 * modify it under the terms of the GNU Lesser General Public
Packit Service 1d8f1c
 * License as published by the Free Software Foundation; either
Packit Service 1d8f1c
 * version 2.1 of the License, or (at your option) any later version.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * This library is distributed in the hope that it will be useful,
Packit Service 1d8f1c
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 1d8f1c
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 1d8f1c
 * Lesser General Public License for more details.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * You should have received a copy of the GNU Lesser General Public
Packit Service 1d8f1c
 * License along with this library; if not, write to the Free Software
Packit Service 1d8f1c
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
Packit Service 1d8f1c
 * USA
Packit Service 1d8f1c
 */
Packit Service 1d8f1c
#include <stdlib.h>
Packit Service 1d8f1c
#include <time.h>
Packit Service 1d8f1c
Packit Service 1d8f1c
#include <ibus.h>
Packit Service 1d8f1c
#include <locale.h>
Packit Service 1d8f1c
#include <glib.h>
Packit Service 1d8f1c
#include "test-client.h"
Packit Service 1d8f1c
Packit Service 1d8f1c
#define MAX_SEND_KEY_NUM 100
Packit Service 1d8f1c
#define MAX_RANDOM_SPACE 5
Packit Service 1d8f1c
Packit Service 1d8f1c
static gboolean
Packit Service 1d8f1c
_sleep_cb (gpointer user_data)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    ibus_quit ();
Packit Service 1d8f1c
    return FALSE;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static void
Packit Service 1d8f1c
_sleep (guint millisecond)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    g_timeout_add (millisecond, (GSourceFunc) _sleep_cb, NULL);
Packit Service 1d8f1c
    ibus_main ();
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
/* ibus stress test
Packit Service 1d8f1c
   Send random key press and release event message to ibus-daemon.
Packit Service 1d8f1c
   Key kind are a-z and space.
Packit Service 1d8f1c
   Check ibus-daemon and ibus engine crash.
Packit Service 1d8f1c
*/
Packit Service 1d8f1c
gint
Packit Service 1d8f1c
main (gint argc, gchar **argv)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    GTimer *timer;
Packit Service 1d8f1c
    GRand *rnd;
Packit Service 1d8f1c
    BusTestClient *client;
Packit Service 1d8f1c
    /* num of send space key */
Packit Service 1d8f1c
    guint32 seed = (guint32) time (NULL);
Packit Service 1d8f1c
    int count = 0;
Packit Service 1d8f1c
    int send_key_num = 0;
Packit Service 1d8f1c
Packit Service 1d8f1c
    setlocale (LC_ALL, "");
Packit Service 1d8f1c
    ibus_init ();
Packit Service 1d8f1c
Packit Service 1d8f1c
    /* need to set active engine */
Packit Service 1d8f1c
    client = bus_test_client_new ();
Packit Service 1d8f1c
    if (client == NULL) {
Packit Service 1d8f1c
        g_printerr ("don't create test-client instance.");
Packit Service 1d8f1c
        exit(1);
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
    timer = g_timer_new ();
Packit Service 1d8f1c
    rnd = g_rand_new ();
Packit Service 1d8f1c
    g_rand_set_seed (rnd, seed);
Packit Service 1d8f1c
    g_print("random seed:%u\n",seed);
Packit Service 1d8f1c
    g_timer_start (timer);
Packit Service 1d8f1c
Packit Service 1d8f1c
    while (1) {
Packit Service 1d8f1c
        guint keysym;
Packit Service 1d8f1c
        if (send_key_num > MAX_SEND_KEY_NUM) {
Packit Service 1d8f1c
            break;
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
        if (!bus_test_client_is_connected (client)) {
Packit Service 1d8f1c
            g_printerr ("ibus-daemon is disconnected\n");
Packit Service 1d8f1c
            break;
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
        if (!bus_test_client_is_enabled (client)) {
Packit Service 1d8f1c
            g_printerr ("ibus engine is enabled\n");
Packit Service 1d8f1c
            break;
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
Packit Service 1d8f1c
        if(count>0 || g_rand_int_range (rnd, 0, 5) == 0) {
Packit Service 1d8f1c
            /* send space key 20% */
Packit Service 1d8f1c
            if (count == 0) {
Packit Service 1d8f1c
                count = g_rand_int_range (rnd, 0, MAX_RANDOM_SPACE) + 1;
Packit Service 1d8f1c
            }
Packit Service 1d8f1c
            if (count-- == 1) {
Packit Service 1d8f1c
                keysym = IBUS_KEY_Return;
Packit Service 1d8f1c
            } else {
Packit Service 1d8f1c
                keysym = IBUS_KEY_space;
Packit Service 1d8f1c
            }
Packit Service 1d8f1c
        } else {
Packit Service 1d8f1c
            /* send random a-z key */
Packit Service 1d8f1c
            keysym = g_rand_int_range (rnd, 0, 'z'-'a'+1) + 'a';
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
        bus_test_client_send_key (client, keysym);
Packit Service 1d8f1c
        send_key_num += 1;
Packit Service 1d8f1c
        /* limit the typing rate to 800 hits/minutes */
Packit Service 1d8f1c
        _sleep (1000 * 60 / 800);
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
    g_print ("%f sec\n", g_timer_elapsed (timer, NULL));
Packit Service 1d8f1c
Packit Service 1d8f1c
    return 0;
Packit Service 1d8f1c
}