예제 #1
0
        /**********************************************************************
         *********************************************************************/
        private static void DrawGrayArrow(int index, float relativeFragmentSize)
        {
            // determine position of fragment block
            List <FragmentBlock> allFragmentsList = AllocationStrategiesAlgorithm.GetAllFragmentsList();
            float mX1 = 0.1f; // memory bound x1

            int           stepsSoFar = 0;
            FragmentBlock fragment   = null;

            for (int i = 0; i <= index; i++)
            {
                fragment    = allFragmentsList.ElementAt(i);
                stepsSoFar += fragment.GetSize();
            }
            float fragmentStart = mX1 + (stepsSoFar * relativeFragmentSize) - (fragment.GetSize() * relativeFragmentSize);
            float fragmentEnd   = mX1 + (stepsSoFar * relativeFragmentSize);
            float xPosition     = fragmentEnd - (fragmentEnd - fragmentStart) / 2; // position of text in the middle of fragment


            // draw the arrow
            float arrowTip = 0.725f;

            canvas.DrawLine(xPercent(xPosition), yPercent(arrowTip + 0.125f), xPercent(xPosition), yPercent(arrowTip), sk_ArrowGray);
            SKPath arrow = new SKPath();

            arrow.MoveTo(xPercent(xPosition), yPercent(arrowTip));
            arrow.RLineTo(-yPercent(0.015f), +yPercent(0.03f));
            arrow.RLineTo(+yPercent(0.03f), 0);
            arrow.RLineTo(-yPercent(0.015f), -yPercent(0.03f));
            arrow.Close();
            canvas.DrawPath(arrow, sk_ArrowGray);
        }
예제 #2
0
        /**********************************************************************
         *********************************************************************/
        private static void DrawRedArrow(float relativeFragmentSize)
        {
            // determine position of fragment block
            int index = AllocationStrategiesAlgorithm.GetCurrentIndex(); //TODO: nach merge könnte der index nicht mehr existieren
            List <FragmentBlock> allFragmentsList = AllocationStrategiesAlgorithm.GetAllFragmentsList();
            float mX1 = 0.1f;                                            // memory bound x1

            int           stepsSoFar = 0;
            FragmentBlock fragment   = null;

            for (int i = 0; i <= index; i++)
            {
                fragment    = allFragmentsList.ElementAt(i);
                stepsSoFar += fragment.GetSize();
            }
            float fragmentStart = mX1 + (stepsSoFar * relativeFragmentSize) - (fragment.GetSize() * relativeFragmentSize);
            float fragmentEnd   = mX1 + (stepsSoFar * relativeFragmentSize);
            float xPosition     = fragmentEnd - (fragmentEnd - fragmentStart) / 2; // position of text in the middle of fragment

            // draw the arrow
            float arrowTip = 0.275f;

            canvas.DrawLine(xPercent(xPosition), yPercent(arrowTip - 0.125f), xPercent(xPosition), yPercent(arrowTip), sk_ArrowRed);
            SKPath arrow = new SKPath();

            arrow.MoveTo(xPercent(xPosition), yPercent(arrowTip));
            arrow.RLineTo(yPercent(0.015f), -yPercent(0.03f));
            arrow.RLineTo(-yPercent(0.03f), 0);
            arrow.RLineTo(yPercent(0.015f), yPercent(0.03f));
            arrow.Close();
            canvas.DrawPath(arrow, sk_ArrowRed);
        }
예제 #3
0
        /**********************************************************************
         *********************************************************************/
        private static float DrawMemory()
        {
            // memory bounds in percent of the canvas
            float mX1     = 0.1f;
            float mX2     = 0.9f;
            float mY1     = 0.3f;
            float mY2     = 0.7f;
            float mWidth  = mX2 - mX1;
            float mHeight = mY2 - mY1;

            int totalMemorySize = AllocationStrategiesAlgorithm.GetTotalMemorySize();
            List <FragmentBlock> allFragmentsList = AllocationStrategiesAlgorithm.GetAllFragmentsList();
            float relativeFragmentSize            = mWidth / totalMemorySize;
            int   stepsSoFar = 0;


            foreach (FragmentBlock fragment in allFragmentsList)
            {
                // fragment size of 1 gets displayed as a .
                String fragmentSize = fragment.GetSize().ToString();
                if (fragmentSize == "1")
                {
                    fragmentSize = "•";
                }

                stepsSoFar += fragment.GetSize();
                float fragmentStart = mX1 + (stepsSoFar * relativeFragmentSize) - (fragment.GetSize() * relativeFragmentSize);
                float fragmentEnd   = mX1 + (stepsSoFar * relativeFragmentSize);
                float xText         = fragmentEnd - (fragmentEnd - fragmentStart) / 2; // position of text in the middle of fragment

                if (fragment.IsFree())
                {
                    // draw size of fragment in the middle of memory
                    canvas.DrawText(fragmentSize, xPercent(xText), yPercent(0.5f), sk_Text);
                }
                else
                {
                    // draw size of fragment beneath the memory
                    //canvas.DrawText(fragmentSize, xPercent(xText), yPercent(0.8f), sk_TextWhite);
                    canvas.DrawText(fragmentSize, xPercent(xText), yPercent(0.8f), sk_Text);

                    // fill in used space
                    SKRect usedSpace = new SKRect(xPercent(fragmentStart), yPercent(mY1), xPercent(fragmentEnd), yPercent(mY2)); //left x1 top y1 right x2 bottom y2
                    canvas.DrawRect(usedSpace, sk_UsedSpace);
                }
            }

            // draw the outlines of the memory box
            SKRect sk_memory = new SKRect(xPercent(mX1), yPercent(mY1), xPercent(mX2), yPercent(mY2));

            canvas.DrawRect(sk_memory, sk_Black);
            canvas.DrawText("free", xPercent(0.05f), yPercent(0.5f), sk_Text);
            //canvas.DrawText("used", xPercent(0.05f), yPercent(0.8f), sk_TextWhite);
            canvas.DrawText("used", xPercent(0.05f), yPercent(0.8f), sk_Text);

            return(relativeFragmentSize);
        }