<!DOCTYPE html>
<html>
<head>
<script src="../resources/runner.js"></script>
<style>
@font-face {
    font-family: 'SVGraffiti';
    src: url("resources/graffiti.svg#SVGraffiti") format(svg)
}
#content {
    font-family: 'SVGraffiti';
}
</style>
</head>
<body>
<div id="content">
<span id="end"></span>
</div>
<script>
PerfTestRunner.prepareToMeasureValuesAsync({done: onCompletedRun, unit: 'ms'});
var now;
var dummy;
var finished = false;

var textToRender = "\
Shakespeare homepage | Hamlet | Entire play\
ACT I\
\
SCENE I. Elsinore. A platform before the castle.\
\
FRANCISCO at his post. Enter to him BERNARDO\
BERNARDO\
Who's there?\
FRANCISCO\
Nay, answer me: stand, and unfold yourself.\
BERNARDO\
Long live the king!\
FRANCISCO\
Bernardo?\
BERNARDO\
He.\
FRANCISCO\
You come most carefully upon your hour.\
BERNARDO\
'Tis now struck twelve; get thee to bed, Francisco.\
FRANCISCO\
For this relief much thanks: 'tis bitter cold,\
And I am sick at heart.\
BERNARDO\
Have you had quiet guard?\
FRANCISCO\
Not a mouse stirring.\
BERNARDO\
Well, good night.\
If you do meet Horatio and Marcellus,\
The rivals of my watch, bid them make haste.\
FRANCISCO\
I think I hear them. Stand, ho! Who's there?\
Enter HORATIO and MARCELLUS\
\
HORATIO\
Friends to this ground.\
MARCELLUS\
And liegemen to the Dane.\
FRANCISCO\
Give you good night.\
MARCELLUS\
O, farewell, honest soldier:\
Who hath relieved you?\
FRANCISCO\
Bernardo has my place.\
Give you good night.\
Exit\
\
MARCELLUS\
Holla! Bernardo!\
BERNARDO\
Say,\
What, is Horatio there?\
HORATIO\
A piece of him.\
BERNARDO\
Welcome, Horatio: welcome, good Marcellus.\
MARCELLUS\
What, has this thing appear'd again to-night?\
BERNARDO\
I have seen nothing.\
MARCELLUS\
Horatio says 'tis but our fantasy,\
And will not let belief take hold of him\
Touching this dreaded sight, twice seen of us:\
Therefore I have entreated him along\
With us to watch the minutes of this night;\
That if again this apparition come,\
He may approve our eyes and speak to it.\
HORATIO\
Tush, tush, 'twill not appear.\
BERNARDO\
Sit down awhile;\
And let us once again assail your ears,\
That are so fortified against our story\
What we have two nights seen.\
HORATIO\
Well, sit we down,\
And let us hear Bernardo speak of this.\
BERNARDO\
Last night of all,\
When yond same star that's westward from the pole\
Had made his course to illume that part of heaven\
Where now it burns, Marcellus and myself,\
The bell then beating one,--\
Enter Ghost\
\
MARCELLUS\
Peace, break thee off; look, where it comes again!\
BERNARDO\
In the same figure, like the king that's dead.\
MARCELLUS\
Thou art a scholar; speak to it, Horatio.\
BERNARDO\
Looks it not like the king? mark it, Horatio.\
HORATIO\
Most like: it harrows me with fear and wonder.\
BERNARDO\
It would be spoke to.\
MARCELLUS\
Question it, Horatio.\
HORATIO\
What art thou that usurp'st this time of night,\
Together with that fair and warlike form\
In which the majesty of buried Denmark\
Did sometimes march? by heaven I charge thee, speak!\
MARCELLUS\
It is offended.\
BERNARDO\
See, it stalks away!\
HORATIO\
Stay! speak, speak! I charge thee, speak!\
Exit Ghost\
\
MARCELLUS\
'Tis gone, and will not answer.\
BERNARDO\
How now, Horatio! you tremble and look pale:\
Is not this something more than fantasy?\
What think you on't?\
HORATIO\
Before my God, I might not this believe\
Without the sensible and true avouch\
Of mine own eyes.\
MARCELLUS\
Is it not like the king?\
HORATIO\
As thou art to thyself:\
Such was the very armour he had on\
When he the ambitious Norway combated;\
So frown'd he once, when, in an angry parle,\
He smote the sledded Polacks on the ice.\
'Tis strange.\
MARCELLUS\
Thus twice before, and jump at this dead hour,\
With martial stalk hath he gone by our watch.\
HORATIO\
In what particular thought to work I know not;\
But in the gross and scope of my opinion,\
This bodes some strange eruption to our state.\
MARCELLUS\
Good now, sit down, and tell me, he that knows,\
Why this same strict and most observant watch\
So nightly toils the subject of the land,\
And why such daily cast of brazen cannon,\
And foreign mart for implements of war;\
Why such impress of shipwrights, whose sore task\
Does not divide the Sunday from the week;\
What might be toward, that this sweaty haste\
Doth make the night joint-labourer with the day:\
Who is't that can inform me?\
HORATIO\
That can I;\
At least, the whisper goes so. Our last king,\
Whose image even but now appear'd to us,\
Was, as you know, by Fortinbras of Norway,\
Thereto prick'd on by a most emulate pride,\
Dared to the combat; in which our valiant Hamlet--\
For so this side of our known world esteem'd him--\
Did slay this Fortinbras; who by a seal'd compact,\
Well ratified by law and heraldry,\
Did forfeit, with his life, all those his lands\
Which he stood seized of, to the conqueror:\
Against the which, a moiety competent\
Was gaged by our king; which had return'd\
To the inheritance of Fortinbras,\
Had he been vanquisher; as, by the same covenant,\
And carriage of the article design'd,\
His fell to Hamlet. Now, sir, young Fortinbras,\
Of unimproved mettle hot and full,\
Hath in the skirts of Norway here and there\
Shark'd up a list of lawless resolutes,\
For food and diet, to some enterprise\
That hath a stomach in't; which is no other--\
As it doth well appear unto our state--\
But to recover of us, by strong hand\
And terms compulsatory, those foresaid lands\
So by his father lost: and this, I take it,\
Is the main motive of our preparations,\
The source of this our watch and the chief head\
Of this post-haste and romage in the land.\
BERNARDO\
I think it be no other but e'en so:\
Well may it sort that this portentous figure\
Comes armed through our watch; so like the king\
That was and is the question of these wars.\
HORATIO\
A mote it is to trouble the mind's eye.\
In the most high and palmy state of Rome,\
A little ere the mightiest Julius fell,\
The graves stood tenantless and the sheeted dead\
Did squeak and gibber in the Roman streets:\
As stars with trains of fire and dews of blood,\
Disasters in the sun; and the moist star\
Upon whose influence Neptune's empire stands\
Was sick almost to doomsday with eclipse:\
And even the like precurse of fierce events,\
As harbingers preceding still the fates\
And prologue to the omen coming on,\
Have heaven and earth together demonstrated\
Unto our climatures and countrymen.--\
But soft, behold! lo, where it comes again!\
Re-enter Ghost\
\
I'll cross it, though it blast me. Stay, illusion!\
If thou hast any sound, or use of voice,\
Speak to me:\
If there be any good thing to be done,\
That may to thee do ease and grace to me,\
Speak to me:\
Cock crows\
\
If thou art privy to thy country's fate,\
Which, happily, foreknowing may avoid, O, speak!\
Or if thou hast uphoarded in thy life\
Extorted treasure in the womb of earth,\
For which, they say, you spirits oft walk in death,\
Speak of it: stay, and speak! Stop it, Marcellus.\
MARCELLUS\
Shall I strike at it with my partisan?\
HORATIO\
Do, if it will not stand.\
BERNARDO\
'Tis here!\
HORATIO\
'Tis here!\
MARCELLUS\
'Tis gone!\
Exit Ghost\
\
We do it wrong, being so majestical,\
To offer it the show of violence;\
For it is, as the air, invulnerable,\
And our vain blows malicious mockery.\
BERNARDO\
It was about to speak, when the cock crew.\
HORATIO\
And then it started like a guilty thing\
Upon a fearful summons. I have heard,\
The cock, that is the trumpet to the morn,\
Doth with his lofty and shrill-sounding throat\
Awake the god of day; and, at his warning,\
Whether in sea or fire, in earth or air,\
The extravagant and erring spirit hies\
To his confine: and of the truth herein\
This present object made probation.\
MARCELLUS\
It faded on the crowing of the cock.\
Some say that ever 'gainst that season comes\
Wherein our Saviour's birth is celebrated,\
The bird of dawning singeth all night long:\
And then, they say, no spirit dares stir abroad;\
The nights are wholesome; then no planets strike,\
No fairy takes, nor witch hath power to charm,\
So hallow'd and so gracious is the time.\
HORATIO\
So have I heard and do in part believe it.\
But, look, the morn, in russet mantle clad,\
Walks o'er the dew of yon high eastward hill:\
Break we our watch up; and by my advice,\
Let us impart what we have seen to-night\
Unto young Hamlet; for, upon my life,\
This spirit, dumb to us, will speak to him.\
Do you consent we shall acquaint him with it,\
As needful in our loves, fitting our duty?\
MARCELLUS\
Let's do't, I pray; and I this morning know\
Where we shall find him most conveniently.\
Exeunt\
\
SCENE II. A room of state in the castle.\
\
Enter KING CLAUDIUS, QUEEN GERTRUDE, HAMLET, POLONIUS, LAERTES, VOLTIMAND, CORNELIUS, Lords, and Attendants\
KING CLAUDIUS\
Though yet of Hamlet our dear brother's death\
The memory be green, and that it us befitted\
To bear our hearts in grief and our whole kingdom\
To be contracted in one brow of woe,\
Yet so far hath discretion fought with nature\
That we with wisest sorrow think on him,\
Together with remembrance of ourselves.\
Therefore our sometime sister, now our queen,\
The imperial jointress to this warlike state,\
Have we, as 'twere with a defeated joy,--\
With an auspicious and a dropping eye,\
With mirth in funeral and with dirge in marriage,\
In equal scale weighing delight and dole,--\
Taken to wife: nor have we herein barr'd\
Your better wisdoms, which have freely gone\
With this affair along. For all, our thanks.\
Now follows, that you know, young Fortinbras,\
Holding a weak supposal of our worth,\
Or thinking by our late dear brother's death\
Our state to be disjoint and out of frame,\
Colleagued with the dream of his advantage,\
He hath not fail'd to pester us with message,\
Importing the surrender of those lands\
Lost by his father, with all bonds of law,\
To our most valiant brother. So much for him.\
Now for ourself and for this time of meeting:\
Thus much the business is: we have here writ\
To Norway, uncle of young Fortinbras,--\
Who, impotent and bed-rid, scarcely hears\
Of this his nephew's purpose,--to suppress\
His further gait herein; in that the levies,\
The lists and full proportions, are all made\
Out of his subject: and we here dispatch\
You, good Cornelius, and you, Voltimand,\
For bearers of this greeting to old Norway;\
Giving to you no further personal power\
To business with the king, more than the scope\
Of these delated articles allow.\
Farewell, and let your haste commend your duty.\
CORNELIUS VOLTIMAND\
In that and all things will we show our duty.\
KING CLAUDIUS\
We doubt it nothing: heartily farewell.\
Exeunt VOLTIMAND and CORNELIUS\
\
And now, Laertes, what's the news with you?\
You told us of some suit; what is't, Laertes?\
You cannot speak of reason to the Dane,\
And loose your voice: what wouldst thou beg, Laertes,\
That shall not be my offer, not thy asking?\
The head is not more native to the heart,\
The hand more instrumental to the mouth,\
Than is the throne of Denmark to thy father.\
What wouldst thou have, Laertes?\
LAERTES\
My dread lord,\
Your leave and favour to return to France;\
From whence though willingly I came to Denmark,\
To show my duty in your coronation,\
Yet now, I must confess, that duty done,\
My thoughts and wishes bend again toward France\
And bow them to your gracious leave and pardon.\
KING CLAUDIUS\
Have you your father's leave? What says Polonius?\
LORD POLONIUS\
He hath, my lord, wrung from me my slow leave\
By laboursome petition, and at last\
Upon his will I seal'd my hard consent:\
I do beseech you, give him leave to go.\
KING CLAUDIUS\
Take thy fair hour, Laertes; time be thine,\
And thy best graces spend it at thy will!\
But now, my cousin Hamlet, and my son,--\
HAMLET\
[Aside] A little more than kin, and less than kind.\
KING CLAUDIUS\
How is it that the clouds still hang on you?\
HAMLET\
Not so, my lord; I am too much i' the sun.\
QUEEN GERTRUDE\
Good Hamlet, cast thy nighted colour off,\
And let thine eye look like a friend on Denmark.\
Do not for ever with thy vailed lids\
Seek for thy noble father in the dust:\
Thou know'st 'tis common; all that lives must die,\
Passing through nature to eternity.\
HAMLET\
Ay, madam, it is common.\
QUEEN GERTRUDE\
If it be,\
Why seems it so particular with thee?\
HAMLET\
Seems, madam! nay it is; I know not 'seems.'\
'Tis not alone my inky cloak, good mother,\
Nor customary suits of solemn black,\
Nor windy suspiration of forced breath,\
No, nor the fruitful river in the eye,\
Nor the dejected 'havior of the visage,\
Together with all forms, moods, shapes of grief,\
That can denote me truly: these indeed seem,\
For they are actions that a man might play:\
But I have that within which passeth show;\
These but the trappings and the suits of woe.\
KING CLAUDIUS\
'Tis sweet and commendable in your nature, Hamlet,\
To give these mourning duties to your father:\
But, you must know, your father lost a father;\
That father lost, lost his, and the survivor bound\
In filial obligation for some term\
To do obsequious sorrow: but to persever\
In obstinate condolement is a course\
Of impious stubbornness; 'tis unmanly grief;\
It shows a will most incorrect to heaven,\
A heart unfortified, a mind impatient,\
An understanding simple and unschool'd:\
For what we know must be and is as common\
As any the most vulgar thing to sense,\
Why should we in our peevish opposition\
Take it to heart? Fie! 'tis a fault to heaven,\
A fault against the dead, a fault to nature,\
To reason most absurd: whose common theme\
Is death of fathers, and who still hath cried,\
From the first corse till he that died to-day,\
'This must be so.' We pray you, throw to earth\
This unprevailing woe, and think of us\
As of a father: for let the world take note,\
You are the most immediate to our throne;\
And with no less nobility of love\
Than that which dearest father bears his son,\
Do I impart toward you. For your intent\
In going back to school in Wittenberg,\
It is most retrograde to our desire:\
And we beseech you, bend you to remain\
Here, in the cheer and comfort of our eye,\
Our chiefest courtier, cousin, and our son.\
QUEEN GERTRUDE\
Let not thy mother lose her prayers, Hamlet:\
I pray thee, stay with us; go not to Wittenberg.\
HAMLET\
I shall in all my best obey you, madam.\
KING CLAUDIUS\
Why, 'tis a loving and a fair reply:\
Be as ourself in Denmark. Madam, come;\
This gentle and unforced accord of Hamlet\
Sits smiling to my heart: in grace whereof,\
No jocund health that Denmark drinks to-day,\
But the great cannon to the clouds shall tell,\
And the king's rouse the heavens all bruit again,\
Re-speaking earthly thunder. Come away.\
Exeunt all but HAMLET\
\
HAMLET\
O, that this too too solid flesh would melt\
Thaw and resolve itself into a dew!\
Or that the Everlasting had not fix'd\
His canon 'gainst self-slaughter! O God! God!\
How weary, stale, flat and unprofitable,\
Seem to me all the uses of this world!\
Fie on't! ah fie! 'tis an unweeded garden,\
That grows to seed; things rank and gross in nature\
Possess it merely. That it should come to this!\
But two months dead: nay, not so much, not two:\
So excellent a king; that was, to this,\
Hyperion to a satyr; so loving to my mother\
That he might not beteem the winds of heaven\
Visit her face too roughly. Heaven and earth!\
Must I remember? why, she would hang on him,\
As if increase of appetite had grown\
By what it fed on: and yet, within a month--\
Let me not think on't--Frailty, thy name is woman!--\
A little month, or ere those shoes were old\
With which she follow'd my poor father's body,\
Like Niobe, all tears:--why she, even she--\
O, God! a beast, that wants discourse of reason,\
Would have mourn'd longer--married with my uncle,\
My father's brother, but no more like my father\
Than I to Hercules: within a month:\
Ere yet the salt of most unrighteous tears\
Had left the flushing in her galled eyes,\
She married. O, most wicked speed, to post\
With such dexterity to incestuous sheets!\
It is not nor it cannot come to good:\
But break, my heart; for I must hold my tongue.\
Enter HORATIO, MARCELLUS, and BERNARDO";

function onCompletedRun() {
    finished = true;
}
function startRun() {
    if (finished)
        return;
    var text = document.createTextNode(textToRender);
    var content = document.getElementById("content");
    content.insertBefore(text, content.firstChild);
    requestAnimationFrame(finishRun);
    now = PerfTestRunner.now();
}
var rafcount = 0;
function finishRun() {
    // Letting the text actually sit on screen for a couple frames is the only way I can get the test
    // to be robust. Given that this test takes multiple seconds to run, adding a small constant to
    // each iteration shouldn't be a dealbreaker.
    if (rafcount < 6) {
        ++rafcount;
        requestAnimationFrame(finishRun);
        return;
    } else
        rafcount = 0;
    dummy = document.getElementById("end").getBoundingClientRect().left;
    var content = document.getElementById("content");
    content.removeChild(content.firstChild);
    PerfTestRunner.measureValueAsync(PerfTestRunner.now() - now);
    requestAnimationFrame(startRun);
}
startRun();
</script>
</body>
</html>
