OSDN Git Service

simpleperf: check perf event limit.
[android-x86/system-extras.git] / simpleperf / event_selection_set.h
index 3fdd71a..746abfa 100644 (file)
 #ifndef SIMPLE_PERF_EVENT_SELECTION_SET_H_
 #define SIMPLE_PERF_EVENT_SELECTION_SET_H_
 
-#include <poll.h>
 #include <functional>
 #include <map>
 #include <vector>
 
-#include <base/macros.h>
+#include <android-base/macros.h>
 
 #include "event_fd.h"
 #include "event_type.h"
@@ -38,6 +37,8 @@ struct CountersInfo {
   std::vector<CounterInfo> counters;
 };
 
+struct pollfd;
+
 // EventSelectionSet helps to monitor events.
 // Firstly, the user creates an EventSelectionSet, and adds the specific event types to monitor.
 // Secondly, the user defines how to monitor the events (by setting enable_on_exec flag,
@@ -68,20 +69,19 @@ class EventSelectionSet {
   bool EnableDwarfCallChainSampling(uint32_t dump_stack_size);
   void SetInherit(bool enable);
 
-  bool OpenEventFilesForAllCpus();
-  bool OpenEventFilesForThreads(const std::vector<pid_t>& threads);
-  bool OpenEventFilesForThreadsOnAllCpus(const std::vector<pid_t>& threads);
-  bool EnableEvents();
+  bool OpenEventFilesForCpus(const std::vector<int>& cpus);
+  bool OpenEventFilesForThreadsOnCpus(const std::vector<pid_t>& threads, std::vector<int> cpus);
   bool ReadCounters(std::vector<CountersInfo>* counters);
   void PreparePollForEventFiles(std::vector<pollfd>* pollfds);
   bool MmapEventFiles(size_t mmap_pages);
   bool ReadMmapEventData(std::function<bool(const char*, size_t)> callback);
 
-  const perf_event_attr& FindEventAttrByType(const EventTypeAndModifier& event_type_modifier);
-  const std::vector<std::unique_ptr<EventFd>>& FindEventFdsByType(
+  const perf_event_attr* FindEventAttrByType(const EventTypeAndModifier& event_type_modifier);
+  const std::vector<std::unique_ptr<EventFd>>* FindEventFdsByType(
       const EventTypeAndModifier& event_type_modifier);
 
  private:
+  void UnionSampleType();
   bool OpenEventFiles(const std::vector<pid_t>& threads, const std::vector<int>& cpus);
 
   struct EventSelection {