📄 cacheview.cpp
字号:
// CacheView.cpp : implementation of the CCacheView class
//
#include "stdafx.h"
#include "Cache.h"
#include "CacheDoc.h"
#include "CacheView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCacheView
IMPLEMENT_DYNCREATE(CCacheView, CView)
BEGIN_MESSAGE_MAP(CCacheView, CView)
//{{AFX_MSG_MAP(CCacheView)
ON_WM_TIMER()
ON_COMMAND(ID_Continu, Oncontinu)
ON_COMMAND(ID_STOP, OnStop)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCacheView construction/destruction
CCacheView::CCacheView()
{
// TODO: add construction code here
}
CCacheView::~CCacheView()
{
}
BOOL CCacheView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CCacheView drawing
void CCacheView::OnDraw(CDC* pDC)
{
CCacheDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(pDoc->m_draw)
{
//pDC->Rectangle(100,100,400,400);
//pDC->TextOut(10,10,"2456");
a.Format("Block_Size is %d kb",pDoc->NewBlock.CBlock_Size);
pDC->TextOut(10,30,a);
a.Format("Set_Size is %d",pDoc->NewBlock.CSet_Size);
pDC->TextOut(10,50,a);
a.Format("Way_Size is %d",pDoc->NewBlock.CWay_Size);
pDC->TextOut(10,70,a);
a.Format("Cache_Size is %d kb",pDoc->NewBlock.CCache_Size);
pDC->TextOut(10,90,a);
if(pDoc->m_hit==0)
{
pDC->TextOut(10,110,"Miss");
pDoc->m_missnum++;
a.Format("Set NO. is %d",pDoc->Set_Num);
pDC->TextOut(10,130,a);
a.Format("Tag NO. is %ld",pDoc->CCache[pDoc->Set_Num][pDoc->Count].tag);
pDC->TextOut(10,150,a);
}
else
{
pDC->TextOut(10,110,"Hit");
pDoc->m_hitnum++;
a.Format("Set NO. is %d",pDoc->Set_Num);
pDC->TextOut(10,130,a);
a.Format("Tag NO. is %ld",pDoc->CCache[pDoc->Set_Num][pDoc->Count].tag);
pDC->TextOut(10,150,a);
}
a.Format("Dirty %d",pDoc->CCache[pDoc->Set_Num][pDoc->Count].dirty);
pDC->TextOut(10,170,a);
a.Format("Way NO. %d",pDoc->Count);
pDC->TextOut(10,190,a);
a.Format("Instruction Exicute %c,%ld",pDoc->buffer[pDoc->I_count],pDoc->Add_buffer[pDoc->J_count]);
pDC->TextOut(10,210,a);
//打印命令行
for(int nu=0;nu<10&&(pDoc->buffer[pDoc->I_count+nu]!='e');nu++)
{
a.Format("Instructions %c,%ld",pDoc->buffer[pDoc->I_count+nu],pDoc->Add_buffer[pDoc->J_count+nu]);
pDC->TextOut(10,230+20*nu,a);
}
//开始画图
//矩形
pDC->Rectangle(300,10,684,650);
//开始画竖线
for(int ii=1;ii<pDoc->NewBlock.CSet_Size;ii++)
{
pDC->MoveTo(300+384/(pDoc->NewBlock.CSet_Size)*ii,10);
pDC->LineTo(300+384/(pDoc->NewBlock.CSet_Size)*ii,650);
}
//开始画横线
for(int jj=1;jj<pDoc->NewBlock.CWay_Size;jj++)
{
pDC->MoveTo(300,10+640/(pDoc->NewBlock.CWay_Size)*jj);
pDC->LineTo(684,10+640/(pDoc->NewBlock.CWay_Size)*jj);
}
//开始画已经被写的cache
for(int iii=0;iii<pDoc->NewBlock.CSet_Size;iii++)
for(int jjj=0;jjj<pDoc->NewBlock.CWay_Size;jjj++)
{
if(pDoc->CCache[iii][jjj].valid==1)
{
CBrush brush(RGB(49,21,200));
pDC->SelectObject(&brush);
CRect rect(300+384/(pDoc->NewBlock.CSet_Size)*iii,10+640/(pDoc->NewBlock.CWay_Size)*jjj,300+384/(pDoc->NewBlock.CSet_Size)*(iii+1),10+640/(pDoc->NewBlock.CWay_Size)*(jjj+1));
pDC->Ellipse(rect);
}
if(pDoc->CCache[iii][jjj].dirty==1)
{
CBrush brush(RGB(255,0,0));
pDC->SelectObject(&brush);
CRect rect(300+384/(pDoc->NewBlock.CSet_Size)*iii,10+640/(pDoc->NewBlock.CWay_Size)*jjj,300+384/(pDoc->NewBlock.CSet_Size)*(iii+1),10+640/(pDoc->NewBlock.CWay_Size)*(jjj+1));
pDC->Ellipse(rect);
}
}
//开始指令cache
//开始画图
//矩形
CBrush brush(RGB(255,255,255));
pDC->SelectObject(&brush);
pDC->Rectangle(700,10,1020,650);
//开始画竖线
for(int iiii=1;iiii<pDoc->NewBlock.CSet_Size;iiii++)
{
pDC->MoveTo(700+320/(pDoc->NewBlock.CSet_Size)*iiii,10);
pDC->LineTo(700+320/(pDoc->NewBlock.CSet_Size)*iiii,650);
}
//开始画横线
for(int jjjj=1;jjjj<pDoc->NewBlock.CWay_Size;jjjj++)
{
pDC->MoveTo(700,10+640/(pDoc->NewBlock.CWay_Size)*jjjj);
pDC->LineTo(1020,10+640/(pDoc->NewBlock.CWay_Size)*jjjj);
}
a.Format("Instruction Pointer to %d",pDoc->Ins_pointer);
pDC->TextOut(10,430,a);
a.Format("Hit Times%f",pDoc->m_hitnum);
pDC->TextOut(10,450,a);
a.Format("Miss Times%f",pDoc->m_missnum);
pDC->TextOut(10,470,a);
pDoc->m_missrate=pDoc->m_missnum/(pDoc->m_hitnum+pDoc->m_missnum);
a.Format("Miss Rate%f",pDoc->m_missrate);
pDC->TextOut(10,490,a);
//开始指令的椭圆
pDoc->NewBlock.CSet_Size;
for(int iiiii=0;iiiii<pDoc->NewBlock.CSet_Size;iiiii++)
for(int jjjjj=0;jjjjj<pDoc->NewBlock.CWay_Size;jjjjj++)
{
if(pDoc->CIns_Cache[iiiii][jjjjj].valid==1)
{
CBrush brush(RGB(49,21,200));
pDC->SelectObject(&brush);
CRect rect(700+320/(pDoc->NewBlock.CSet_Size)*iiiii,10+640/(pDoc->NewBlock.CWay_Size)*jjjjj,700+320/(pDoc->NewBlock.CSet_Size)*(iiiii+1),10+640/(pDoc->NewBlock.CWay_Size)*(jjjjj+1));
pDC->Ellipse(rect);
}
if(pDoc->CIns_Cache[iiiii][jjjjj].dirty==1)
{
CBrush brush(RGB(255,0,0));
pDC->SelectObject(&brush);
CRect rect(700+320/(pDoc->NewBlock.CSet_Size)*iiiii,10+640/(pDoc->NewBlock.CWay_Size)*jjjjj,700+320/(pDoc->NewBlock.CSet_Size)*(iiiii+1),10+640/(pDoc->NewBlock.CWay_Size)*(jjjjj+1));
pDC->Ellipse(rect);
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CCacheView printing
BOOL CCacheView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CCacheView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CCacheView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CCacheView diagnostics
#ifdef _DEBUG
void CCacheView::AssertValid() const
{
CView::AssertValid();
}
void CCacheView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CCacheDoc* CCacheView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCacheDoc)));
return (CCacheDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCacheView message handlers
void CCacheView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CCacheDoc* pDoc1 = GetDocument();
ASSERT_VALID(pDoc1);
pDoc1->a1();
CView::OnTimer(nIDEvent);
}
void CCacheView::Oncontinu()
{
SetTimer(2,200,NULL);
}
void CCacheView::OnStop()
{
// TODO: Add your command handler code here
KillTimer(2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -