AccessTraceForAddress.hh revision 7055
17753SWilliam.Wang@arm.com/*
27753SWilliam.Wang@arm.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
37753SWilliam.Wang@arm.com * All rights reserved.
47753SWilliam.Wang@arm.com *
57753SWilliam.Wang@arm.com * Redistribution and use in source and binary forms, with or without
67753SWilliam.Wang@arm.com * modification, are permitted provided that the following conditions are
77753SWilliam.Wang@arm.com * met: redistributions of source code must retain the above copyright
87753SWilliam.Wang@arm.com * notice, this list of conditions and the following disclaimer;
97753SWilliam.Wang@arm.com * redistributions in binary form must reproduce the above copyright
107753SWilliam.Wang@arm.com * notice, this list of conditions and the following disclaimer in the
117753SWilliam.Wang@arm.com * documentation and/or other materials provided with the distribution;
127753SWilliam.Wang@arm.com * neither the name of the copyright holders nor the names of its
137753SWilliam.Wang@arm.com * contributors may be used to endorse or promote products derived from
147753SWilliam.Wang@arm.com * this software without specific prior written permission.
157753SWilliam.Wang@arm.com *
167753SWilliam.Wang@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
177753SWilliam.Wang@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
187753SWilliam.Wang@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
197753SWilliam.Wang@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
207753SWilliam.Wang@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
217753SWilliam.Wang@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
227753SWilliam.Wang@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
237753SWilliam.Wang@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
247753SWilliam.Wang@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
257753SWilliam.Wang@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
267753SWilliam.Wang@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
277753SWilliam.Wang@arm.com */
287753SWilliam.Wang@arm.com
297753SWilliam.Wang@arm.com#ifndef __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__
307753SWilliam.Wang@arm.com#define __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__
317753SWilliam.Wang@arm.com
327753SWilliam.Wang@arm.com#include <iostream>
337753SWilliam.Wang@arm.com
347753SWilliam.Wang@arm.com#include "mem/protocol/AccessModeType.hh"
357753SWilliam.Wang@arm.com#include "mem/protocol/CacheRequestType.hh"
367753SWilliam.Wang@arm.com#include "mem/ruby/common/Address.hh"
377753SWilliam.Wang@arm.com#include "mem/ruby/common/Global.hh"
387950SAli.Saidi@ARM.com#include "mem/ruby/common/Set.hh"
397753SWilliam.Wang@arm.com#include "mem/ruby/system/NodeID.hh"
407753SWilliam.Wang@arm.com
418229Snate@binkert.orgclass Histogram;
427950SAli.Saidi@ARM.com
437950SAli.Saidi@ARM.comclass AccessTraceForAddress
447753SWilliam.Wang@arm.com{
457753SWilliam.Wang@arm.com  public:
467753SWilliam.Wang@arm.com    AccessTraceForAddress();
477753SWilliam.Wang@arm.com    explicit AccessTraceForAddress(const Address& addr);
487753SWilliam.Wang@arm.com    ~AccessTraceForAddress();
497753SWilliam.Wang@arm.com
507753SWilliam.Wang@arm.com    void update(CacheRequestType type, AccessModeType access_mode, NodeID cpu,
517753SWilliam.Wang@arm.com                bool sharing_miss);
527753SWilliam.Wang@arm.com    int getTotal() const;
537753SWilliam.Wang@arm.com    int getSharing() const { return m_sharing; }
547753SWilliam.Wang@arm.com    int getTouchedBy() const { return m_touched_by.count(); }
557753SWilliam.Wang@arm.com    const Address& getAddress() const { return m_addr; }
567753SWilliam.Wang@arm.com    void addSample(int value);
577950SAli.Saidi@ARM.com
587753SWilliam.Wang@arm.com    void print(std::ostream& out) const;
597753SWilliam.Wang@arm.com
607753SWilliam.Wang@arm.com  private:
617950SAli.Saidi@ARM.com    Address m_addr;
627950SAli.Saidi@ARM.com    uint64 m_loads;
637753SWilliam.Wang@arm.com    uint64 m_stores;
647753SWilliam.Wang@arm.com    uint64 m_atomics;
657753SWilliam.Wang@arm.com    uint64 m_total;
667753SWilliam.Wang@arm.com    uint64 m_user;
677753SWilliam.Wang@arm.com    uint64 m_sharing;
687950SAli.Saidi@ARM.com    Set m_touched_by;
697950SAli.Saidi@ARM.com    Histogram* m_histogram_ptr;
707950SAli.Saidi@ARM.com};
717950SAli.Saidi@ARM.com
727753SWilliam.Wang@arm.cominline bool
737753SWilliam.Wang@arm.comnode_less_then_eq(const AccessTraceForAddress* n1,
747753SWilliam.Wang@arm.com                  const AccessTraceForAddress* n2)
757950SAli.Saidi@ARM.com{
767950SAli.Saidi@ARM.com    return n1->getTotal() > n2->getTotal();
777950SAli.Saidi@ARM.com}
787753SWilliam.Wang@arm.com
797753SWilliam.Wang@arm.cominline std::ostream&
807753SWilliam.Wang@arm.comoperator<<(std::ostream& out, const AccessTraceForAddress& obj)
817753SWilliam.Wang@arm.com{
827753SWilliam.Wang@arm.com    obj.print(out);
837753SWilliam.Wang@arm.com    out << std::flush;
847753SWilliam.Wang@arm.com    return out;
857753SWilliam.Wang@arm.com}
867753SWilliam.Wang@arm.com
877753SWilliam.Wang@arm.com#endif // __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__
887753SWilliam.Wang@arm.com