blob: 6f3eb4deed892e2744c8cc9ba0041e9cb6513566 [file] [log] [blame]
/* Copyright (C) 2021-2023 Free Software Foundation, Inc.
Contributed by Oracle.
This file is part of GNU Binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
#ifndef _OVW_DATA_H
#define _OVW_DATA_H
// An Ovw_data object is used to supply data for constructing an overview
// display.
#include "dbe_structs.h"
class Sample;
class DataView;
class Ovw_data
{
public:
enum OVW_LMS_STORAGE
{// in display order, not LMS_* order
// Note: use same display order of LMS_* in: er.rc, TimelineVariable.java,
// Ovw_data.h, BaseMetricTreeNode.cc and Experiment.cc metric registration
OVW_LMS_USER,
OVW_LMS_SYSTEM,
OVW_LMS_TRAP,
OVW_LMS_USER_LOCK,
OVW_LMS_DFAULT,
OVW_LMS_TFAULT,
OVW_LMS_KFAULT,
OVW_LMS_STOPPED,
OVW_LMS_WAIT_CPU,
OVW_LMS_SLEEP,
OVW_NUMVALS // must be last
};
// Ovw_item contains one slice of data
struct Ovw_item
{
Value values [OVW_NUMVALS + 1]; // Value list (value[0] is left over)
int states; // Number of non-zero states
Value total; // Total of all values
int size; // Number of values
timestruc_t start; // Start time of sample
timestruc_t duration; // Duration of sample
timestruc_t end; // End time of sample
timestruc_t tlwp; // Total LWP time
double nlwp; // Average number of LWPs
ValueTag type; // Type of value
int number; // Sample number
char *start_label; // Sample start label
char *end_label; // Sample end label
};
Ovw_data (DataView *, hrtime_t exp_start);
Ovw_data ();
~Ovw_data ();
void sum (Ovw_data *data);
Ovw_item get_totals ();
Ovw_item get_labels ();
// zero out contents of Ovw_item
static Ovw_item *reset_item (Ovw_item *item);
int
size ()
{
return ovw_items->size ();
}
Ovw_item
fetch (int index)
{
return *ovw_items->fetch (index);
}
private:
// Compute the values for "ovw_item" from "sample".
void extract_data (Ovw_item *ovw_item, Sample *sample);
Vector<Ovw_item*> *ovw_items;
Ovw_item *totals; // Item to cache totals
DataView *packets;
};
#endif /* _OVW_DATA_H */