Last active
October 25, 2020 06:34
-
-
Save switchswap/d37ced48c1f7a852e8801df21ed17529 to your computer and use it in GitHub Desktop.
CPU Scheduler Gantt Chart Creator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
import random | |
import numpy as np | |
import matplotlib.pyplot as plt | |
input_filename = "data.txt" | |
output_filename = "output.png" | |
procs = [] | |
proc_num = 0 | |
class Proc: | |
def __init__(self, name, data): | |
global proc_num | |
self.priority = [] | |
self.start_tick = [] | |
self.duration = [] | |
self.name = name | |
self.color = "" | |
# Get random color data | |
random.seed(proc_num + 14) # + 14 looked better | |
self.color = f"#{random.randrange(0x1000000):06x}" | |
proc_num = proc_num + 1 | |
# Parse data | |
# entry = [start, duration, priority] | |
for entry in data: | |
self.priority.append(entry[2]) | |
self.start_tick.append(entry[0]) | |
self.duration.append(entry[1]) | |
# Open and parse file | |
file = open(input_filename, 'r') | |
lines = file.readlines() | |
processes = {} | |
print("Parsing data...") | |
process_name = "" | |
process_data = [] | |
for line in lines: | |
if "name" in line.lower(): | |
if process_name != "" and len(process_data) != 0: | |
processes[process_name] = process_data | |
process_name = "" | |
process_data = [] | |
process_name = line | |
elif "start" in line.lower(): | |
nums = [int(s) for s in re.findall(r"\b\d+\b", line)] | |
process_data.append(nums) | |
# Add last bit of data | |
processes[process_name] = process_data | |
print("Parsing completed.") | |
# Parse output into internal data structure | |
print("Generating internal data structures...") | |
for proc in processes: | |
procs.append(Proc(proc, processes[proc])) | |
# Graph | |
print("Generating graph image...") | |
plt.figure(figsize=(20, 10)) | |
fig, ax = plt.subplots() | |
ax.grid(True) | |
for proc in procs: | |
for i in range(len(proc.priority)): | |
ax.broken_barh([(proc.start_tick[i], proc.duration[i])], | |
(proc.priority[i], 1), | |
facecolors=proc.color) | |
ax.set_ylabel('Priority') | |
ax.set_xlabel('Ticks') | |
ax.set_ylim(0, 3) | |
ax.set_yticklabels(("Q0", "Q1", "Q2")) | |
ax.set_yticks(np.arange(3)) | |
ax.invert_yaxis() | |
ax.legend([proc.name for proc in procs], loc='center left', bbox_to_anchor=(1.0, 0.5), | |
labelcolor=[proc.color for proc in procs]) | |
leg = ax.get_legend() | |
for i in range(len(leg.legendHandles)): | |
leg.legendHandles[i].set_color(procs[i].color) | |
plt.tight_layout() | |
plt.savefig(output_filename, dpi=1000) # High dpi since there are lot of ticks | |
print("Image generated!") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Counter = 1073741825 | |
name= test2, pid= 7 | |
Number of last used ticks in respective queue = {0, 0, 2} | |
Number of times scheduled in respective queue = {17, 17, 49} | |
************************************************** | |
Start: 453, Duration: 1, Priority: 0 | |
Start: 454, Duration: 2, Priority: 1 | |
Start: 494, Duration: 8, Priority: 2 | |
Start: 540, Duration: 8, Priority: 2 | |
Start: 586, Duration: 8, Priority: 2 | |
Start: 637, Duration: 1, Priority: 0 | |
Start: 638, Duration: 2, Priority: 1 | |
Start: 683, Duration: 8, Priority: 2 | |
Start: 734, Duration: 1, Priority: 0 | |
Start: 735, Duration: 2, Priority: 1 | |
Start: 780, Duration: 8, Priority: 2 | |
Start: 826, Duration: 8, Priority: 2 | |
Start: 872, Duration: 8, Priority: 2 | |
Start: 918, Duration: 8, Priority: 2 | |
Start: 964, Duration: 8, Priority: 2 | |
Start: 1015, Duration: 1, Priority: 0 | |
Start: 1016, Duration: 2, Priority: 1 | |
Start: 1061, Duration: 8, Priority: 2 | |
Start: 1112, Duration: 1, Priority: 0 | |
Start: 1113, Duration: 2, Priority: 1 | |
Start: 1158, Duration: 8, Priority: 2 | |
Start: 1204, Duration: 8, Priority: 2 | |
Start: 1250, Duration: 8, Priority: 2 | |
Start: 1296, Duration: 8, Priority: 2 | |
Start: 1342, Duration: 8, Priority: 2 | |
Start: 1393, Duration: 1, Priority: 0 | |
Start: 1394, Duration: 2, Priority: 1 | |
Start: 1439, Duration: 8, Priority: 2 | |
Start: 1490, Duration: 1, Priority: 0 | |
Start: 1491, Duration: 2, Priority: 1 | |
Start: 1536, Duration: 8, Priority: 2 | |
Start: 1582, Duration: 8, Priority: 2 | |
Start: 1628, Duration: 8, Priority: 2 | |
Start: 1674, Duration: 8, Priority: 2 | |
Start: 1720, Duration: 8, Priority: 2 | |
Start: 1771, Duration: 1, Priority: 0 | |
Start: 1772, Duration: 2, Priority: 1 | |
Start: 1817, Duration: 8, Priority: 2 | |
Start: 1868, Duration: 1, Priority: 0 | |
Start: 1869, Duration: 2, Priority: 1 | |
Start: 1914, Duration: 8, Priority: 2 | |
Start: 1960, Duration: 8, Priority: 2 | |
Start: 2006, Duration: 8, Priority: 2 | |
Start: 2052, Duration: 8, Priority: 2 | |
Start: 2098, Duration: 8, Priority: 2 | |
Start: 2149, Duration: 1, Priority: 0 | |
Start: 2150, Duration: 2, Priority: 1 | |
Start: 2195, Duration: 8, Priority: 2 | |
Start: 2246, Duration: 1, Priority: 0 | |
Start: 2247, Duration: 2, Priority: 1 | |
Start: 2292, Duration: 8, Priority: 2 | |
Start: 2338, Duration: 8, Priority: 2 | |
Start: 2384, Duration: 8, Priority: 2 | |
Start: 2430, Duration: 8, Priority: 2 | |
Start: 2476, Duration: 8, Priority: 2 | |
Start: 2527, Duration: 1, Priority: 0 | |
Start: 2528, Duration: 2, Priority: 1 | |
Start: 2573, Duration: 8, Priority: 2 | |
Start: 2624, Duration: 1, Priority: 0 | |
Start: 2625, Duration: 2, Priority: 1 | |
Start: 2670, Duration: 8, Priority: 2 | |
Start: 2716, Duration: 8, Priority: 2 | |
Start: 2762, Duration: 8, Priority: 2 | |
Start: 2808, Duration: 8, Priority: 2 | |
Start: 2854, Duration: 8, Priority: 2 | |
Start: 2905, Duration: 1, Priority: 0 | |
Start: 2906, Duration: 2, Priority: 1 | |
Start: 2951, Duration: 8, Priority: 2 | |
Start: 3002, Duration: 1, Priority: 0 | |
Start: 3003, Duration: 2, Priority: 1 | |
Start: 3048, Duration: 8, Priority: 2 | |
Start: 3094, Duration: 8, Priority: 2 | |
Start: 3140, Duration: 8, Priority: 2 | |
Start: 3186, Duration: 8, Priority: 2 | |
Start: 3232, Duration: 8, Priority: 2 | |
Start: 3283, Duration: 1, Priority: 0 | |
Start: 3284, Duration: 2, Priority: 1 | |
Start: 3329, Duration: 8, Priority: 2 | |
Start: 3380, Duration: 1, Priority: 0 | |
Start: 3381, Duration: 2, Priority: 1 | |
Start: 3426, Duration: 8, Priority: 2 | |
Start: 3465, Duration: 8, Priority: 2 | |
Start: 3508, Duration: 8, Priority: 2 | |
name= test2, pid= 3 | |
Number of last used ticks in respective queue = {0, 0, 3} | |
Number of times scheduled in respective queue = {17, 23, 56} | |
************************************************** | |
Start: 409, Duration: 1, Priority: 0 | |
Start: 410, Duration: 0, Priority: 1 | |
Start: 410, Duration: 0, Priority: 1 | |
Start: 410, Duration: 0, Priority: 1 | |
Start: 410, Duration: 0, Priority: 1 | |
Start: 410, Duration: 0, Priority: 1 | |
Start: 410, Duration: 0, Priority: 1 | |
Start: 410, Duration: 2, Priority: 1 | |
Start: 412, Duration: 8, Priority: 2 | |
Start: 423, Duration: 8, Priority: 2 | |
Start: 445, Duration: 8, Priority: 2 | |
Start: 486, Duration: 8, Priority: 2 | |
Start: 532, Duration: 8, Priority: 2 | |
Start: 583, Duration: 1, Priority: 0 | |
Start: 584, Duration: 2, Priority: 1 | |
Start: 629, Duration: 8, Priority: 2 | |
Start: 680, Duration: 1, Priority: 0 | |
Start: 681, Duration: 2, Priority: 1 | |
Start: 726, Duration: 8, Priority: 2 | |
Start: 772, Duration: 8, Priority: 2 | |
Start: 818, Duration: 8, Priority: 2 | |
Start: 864, Duration: 8, Priority: 2 | |
Start: 910, Duration: 8, Priority: 2 | |
Start: 961, Duration: 1, Priority: 0 | |
Start: 962, Duration: 2, Priority: 1 | |
Start: 1007, Duration: 8, Priority: 2 | |
Start: 1058, Duration: 1, Priority: 0 | |
Start: 1059, Duration: 2, Priority: 1 | |
Start: 1104, Duration: 8, Priority: 2 | |
Start: 1150, Duration: 8, Priority: 2 | |
Start: 1196, Duration: 8, Priority: 2 | |
Start: 1242, Duration: 8, Priority: 2 | |
Start: 1288, Duration: 8, Priority: 2 | |
Start: 1339, Duration: 1, Priority: 0 | |
Start: 1340, Duration: 2, Priority: 1 | |
Start: 1385, Duration: 8, Priority: 2 | |
Start: 1436, Duration: 1, Priority: 0 | |
Start: 1437, Duration: 2, Priority: 1 | |
Start: 1482, Duration: 8, Priority: 2 | |
Start: 1528, Duration: 8, Priority: 2 | |
Start: 1574, Duration: 8, Priority: 2 | |
Start: 1620, Duration: 8, Priority: 2 | |
Start: 1666, Duration: 8, Priority: 2 | |
Start: 1717, Duration: 1, Priority: 0 | |
Start: 1718, Duration: 2, Priority: 1 | |
Start: 1763, Duration: 8, Priority: 2 | |
Start: 1814, Duration: 1, Priority: 0 | |
Start: 1815, Duration: 2, Priority: 1 | |
Start: 1860, Duration: 8, Priority: 2 | |
Start: 1906, Duration: 8, Priority: 2 | |
Start: 1952, Duration: 8, Priority: 2 | |
Start: 1998, Duration: 8, Priority: 2 | |
Start: 2044, Duration: 8, Priority: 2 | |
Start: 2095, Duration: 1, Priority: 0 | |
Start: 2096, Duration: 2, Priority: 1 | |
Start: 2141, Duration: 8, Priority: 2 | |
Start: 2192, Duration: 1, Priority: 0 | |
Start: 2193, Duration: 2, Priority: 1 | |
Start: 2238, Duration: 8, Priority: 2 | |
Start: 2284, Duration: 8, Priority: 2 | |
Start: 2330, Duration: 8, Priority: 2 | |
Start: 2376, Duration: 8, Priority: 2 | |
Start: 2422, Duration: 8, Priority: 2 | |
Start: 2473, Duration: 1, Priority: 0 | |
Start: 2474, Duration: 2, Priority: 1 | |
Start: 2519, Duration: 8, Priority: 2 | |
Start: 2570, Duration: 1, Priority: 0 | |
Start: 2571, Duration: 2, Priority: 1 | |
Start: 2616, Duration: 8, Priority: 2 | |
Start: 2662, Duration: 8, Priority: 2 | |
Start: 2708, Duration: 8, Priority: 2 | |
Start: 2754, Duration: 8, Priority: 2 | |
Start: 2800, Duration: 8, Priority: 2 | |
Start: 2851, Duration: 1, Priority: 0 | |
Start: 2852, Duration: 2, Priority: 1 | |
Start: 2897, Duration: 8, Priority: 2 | |
Start: 2948, Duration: 1, Priority: 0 | |
Start: 2949, Duration: 2, Priority: 1 | |
Start: 2994, Duration: 8, Priority: 2 | |
Start: 3040, Duration: 8, Priority: 2 | |
Start: 3086, Duration: 8, Priority: 2 | |
Start: 3132, Duration: 8, Priority: 2 | |
Start: 3178, Duration: 8, Priority: 2 | |
Start: 3229, Duration: 1, Priority: 0 | |
Start: 3230, Duration: 2, Priority: 1 | |
Start: 3275, Duration: 8, Priority: 2 | |
Start: 3326, Duration: 1, Priority: 0 | |
Start: 3327, Duration: 2, Priority: 1 | |
Start: 3372, Duration: 8, Priority: 2 | |
Start: 3418, Duration: 8, Priority: 2 | |
Start: 3464, Duration: 1, Priority: 2 | |
Start: 3492, Duration: 0, Priority: 2 | |
Start: 3519, Duration: 0, Priority: 2 | |
Start: 3540, Duration: 0, Priority: 2 | |
Start: 3543, Duration: 0, Priority: 2 | |
Start: 3543, Duration: 0, Priority: 2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment