/*
- * Copyright (C) 2011 Julien Desfossez
+ * Copyright (C) 2011-2012 Julien Desfossez
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License Version 2 as
#define _COMMON_H
#include <semaphore.h>
+extern "C" {
#include <babeltrace/ctf/events.h>
+}
+#include <state/IntervalHistoryProvider.hpp>
+#include <state/StateSystem.hpp>
+#include <state/statevalue/StateValue.hpp>
+#include <state/statevalue/IntegerStateValue.hpp>
+#include <state/statevalue/StringStateValue.hpp>
+#include <state/statevalue/NullStateValue.hpp>
+#include <state/statevalue/QuarkStateValue.hpp>
+#include <sstream>
+#include <map>
+#include <vector>
+#include <set>
+
#include "lttngtoptypes.h"
#include "cputop.h"
+using namespace State;
+
#define NSEC_PER_USEC 1000
#define NSEC_PER_SEC 1000000000L
-sem_t goodtodisplay, goodtoupdate, timer, pause_sem, end_trace_sem, bootstrap;
-
-GPtrArray *copies; /* struct lttngtop */
-pthread_mutex_t perf_list_mutex;
-
-struct lttngtop *data;
-
-struct processtop *find_process_tid(struct lttngtop *ctx, int pid, char *comm);
-struct processtop* add_proc(struct lttngtop *ctx, int pid, char *comm,
- unsigned long timestamp);
-struct processtop* update_proc(struct processtop* proc, int pid, int tid,
- int ppid, char *comm);
-void add_thread(struct processtop *parent, struct processtop *thread);
-struct processtop* get_proc(struct lttngtop *ctx, int tid, char *comm,
- unsigned long timestamp);
-void death_proc(struct lttngtop *ctx, int tid, char *comm,
- unsigned long timestamp);
-struct cputime* add_cpu(int cpu);
-struct cputime* get_cpu(int cpu);
-struct lttngtop* get_copy_lttngtop(unsigned long start, unsigned long end);
-struct perfcounter *add_perf_counter(GPtrArray *perf, GQuark quark,
- unsigned long count);
-struct perfcounter *get_perf_counter(const char *name, struct processtop *proc,
- struct cputime *cpu);
-void reset_global_counters(void);
+extern StateSystem *state_system;
+extern std::set<Quark> modified_quarks;
+const unsigned long refresh_display = 1 * NSEC_PER_SEC;
+extern unsigned long last_display_update;
+extern unsigned long first_display_update;
+
+extern sem_t goodtodisplay, goodtoupdate, timer, pause_sem, end_trace_sem, bootstrap;
+
+bool find_process_tid(int tid, Quark &ret_proc_quark);
+Quark add_proc(int tid, std::string comm, unsigned long timestamp);
+void update_proc(unsigned long timestamp, Quark proc, int pid, int tid,
+ int ppid, char *comm);
+void add_thread(unsigned long timestamp, Quark parent, Quark thread);
+Quark get_proc(int tid, char *comm, unsigned long timestamp);
+Quark get_proc_pid(int pid, int tid, unsigned long timestamp);
+void death_proc(int tid, char *comm, unsigned long timestamp);
+
+Quark add_cpu(int cpu, unsigned long timestamp);
+Quark get_cpu(int cpu, unsigned long timestamp);
+void update_state_on_refresh(unsigned long start, unsigned long end);
+Quark get_perf_counter(unsigned long timestamp, Quark root, std::string name);
/* common field access functions */
-uint64_t get_cpu_id(const struct bt_ctf_event *event);
-uint64_t get_context_tid(const struct bt_ctf_event *event);
-uint64_t get_context_pid(const struct bt_ctf_event *event);
-uint64_t get_context_ppid(const struct bt_ctf_event *event);
+int get_cpu_id(const struct bt_ctf_event *event);
+int get_context_tid(const struct bt_ctf_event *event);
+int get_context_pid(const struct bt_ctf_event *event);
+int get_context_ppid(const struct bt_ctf_event *event);
char *get_context_comm(const struct bt_ctf_event *event);
+enum bt_cb_ret handle_statedump_process_state(
+ struct bt_ctf_event *call_data, void *private_data);
+
+std::string path_name_from_cpuid(int cpuid);
+std::string thread_path_name_from_tid(int tid);
+std::string path_name_from_tid(int tid);
+std::string path_name_from_fd(int fd);
+
+void update_file_on_refresh(Quark proc, Quark file, unsigned long end);
+void update_proc_on_refresh(Quark proc, unsigned long start, unsigned long end);
+
+void modify_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, int value);
+void modify_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, Quark value);
+void modify_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, char *value);
+void modify_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, unsigned long value);
+void modify_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, std::string value);
+void nullify_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute);
+void increment_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute);
+void increase_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, int amount);
+void increase_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, unsigned long amount);
+void decrement_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute);
+void decrease_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, int amount);
+void decrease_attribute(unsigned long timestamp, const Quark *starting_node,
+ std::string attribute, unsigned long amount);
+bool get_current_attribute_value_int(const Quark *starting_node,
+ std::string attribute, int &value);
+bool get_current_attribute_value_ulong(const Quark *starting_node,
+ std::string attribute, unsigned long &value);
+bool get_current_attribute_value_quark(const Quark *starting_node,
+ std::string attribute, Quark &value);
+bool get_current_attribute_value_string(const Quark *starting_node,
+ std::string attribute, std::string &value);
+bool get_attribute_value_at_int(unsigned long timestamp,
+ const Quark *starting_node,
+ std::string attribute,
+ int &value);
+bool get_attribute_value_at_ulong(unsigned long timestamp,
+ const Quark *starting_node,
+ std::string attribute,
+ unsigned long &value);
+bool get_attribute_value_at_quark(unsigned long timestamp,
+ const Quark *starting_node,
+ std::string attribute,
+ Quark &value);
+bool get_attribute_value_at_string(unsigned long timestamp,
+ const Quark *starting_node,
+ std::string attribute,
+ std::string &value);
+bool get_interval_value_int(unsigned long start,
+ unsigned long end,
+ const Quark *starting_node,
+ std::string attribute,
+ int &value);
+bool get_interval_value_ulong(unsigned long start,
+ unsigned long end,
+ const Quark *starting_node,
+ std::string attribute,
+ unsigned long &value);
+void add_in_sequence(unsigned long timestamp, Quark item, Quark beg);
+void remove_from_sequence(unsigned long timestamp, Quark item, Quark beg);
+int get_sequence_length(unsigned long timestamp, Quark beg);
+int sequence_to_array(unsigned long timestamp, Quark beg, Quark *arr,
+ int len);
+int get_global_perf_list(unsigned long timestamp, Quark *arr, int len);
+int get_global_perf_list_size(unsigned long timestamp);
+int get_number_of_opened_files(unsigned long timestamp, Quark proc);
+int get_opened_files(unsigned long timestamp, Quark proc, Quark *arr, int len);
+
#endif /* _COMMON_H */