summaryrefslogtreecommitdiff
path: root/storage/perfschema/pfs_instr.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/perfschema/pfs_instr.h')
-rw-r--r--storage/perfschema/pfs_instr.h49
1 files changed, 45 insertions, 4 deletions
diff --git a/storage/perfschema/pfs_instr.h b/storage/perfschema/pfs_instr.h
index a509d054d69..791e2cd1f8d 100644
--- a/storage/perfschema/pfs_instr.h
+++ b/storage/perfschema/pfs_instr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008-2009 Sun Microsystems, Inc
+/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
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
@@ -10,8 +10,8 @@
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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+ along with this program; if not, write to the Free Software Foundation,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
#ifndef PFS_INSTR_H
#define PFS_INSTR_H
@@ -21,7 +21,6 @@
Performance schema instruments (declarations).
*/
-#include <sql_priv.h>
#include "pfs_lock.h"
#include "pfs_instr_class.h"
#include "pfs_events_waits.h"
@@ -136,6 +135,48 @@ struct PFS_table : public PFS_instr
*/
#define LOCKER_STACK_SIZE 3
+/**
+ @def PFS_MAX_ALLOC_RETRY
+ Maximum number of times the code attempts to allocate an item
+ from internal buffers, before giving up.
+*/
+#define PFS_MAX_ALLOC_RETRY 1000
+
+#define PFS_MAX_SCAN_PASS 2
+
+/**
+ Helper to scan circular buffers.
+ Given a buffer of size [0, max_size - 1],
+ and a random starting point in the buffer,
+ this helper returns up to two [first, last -1] intervals that:
+ - fit into the [0, max_size - 1] range,
+ - have a maximum combined length of at most PFS_MAX_ALLOC_RETRY.
+*/
+struct PFS_scan
+{
+public:
+ void init(uint random, uint max_size);
+
+ bool has_pass() const
+ { return (m_pass < m_pass_max); }
+
+ void next_pass()
+ { m_pass++; }
+
+ uint first() const
+ { return m_first[m_pass]; }
+
+ uint last() const
+ { return m_last[m_pass]; }
+
+private:
+ uint m_pass;
+ uint m_pass_max;
+ uint m_first[PFS_MAX_SCAN_PASS];
+ uint m_last[PFS_MAX_SCAN_PASS];
+};
+
+
/** Instrumented thread implementation. @see PSI_thread. */
struct PFS_thread
{