commit c2a5d78b6c3fc6319a1e6d761564d2482e98084b
parent 9c086eae61b831d4dd8c07f32fe6c40e5106f05b
Author: Kyle Milz <kyle@0x30.net>
Date: Sat, 24 Sep 2016 10:38:29 -0600
src: get gl into basic working state again
Diffstat:
3 files changed, 56 insertions(+), 66 deletions(-)
diff --git a/src/gl_main.cc b/src/gl_main.cc
@@ -8,6 +8,7 @@
#include "gl_buffer.h"
#include "gl_view.h"
#include "process_dir.h"
+#include "process_file.h"
#include "shm.h"
#if defined(__OpenBSD__)
@@ -35,8 +36,9 @@ public:
static View *static_vu;
static ProcessDir m_pdir;
- static std::vector<ProcessFile *> drawables;
+ static std::vector<ProcessFile> drawables;
private:
+ static void add_new_process(std::string const &);
static void display();
static void reshape_func(int, int);
static void keyboard_func(unsigned char, int, int);
@@ -47,7 +49,7 @@ private:
demo_glstate_t *st;
};
-std::vector<ProcessFile *> window::drawables;
+std::vector<ProcessFile> window::drawables;
ProcessDir window::m_pdir;
View *window::static_vu;
@@ -62,7 +64,7 @@ window::window(int argc, char *argv[])
glutInit(&argc, argv);
glutInitWindowSize(1600, 1200);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
- int window = glutCreateWindow("Source Code Visualizer");
+ glutCreateWindow("C It Run");
glutReshapeFunc(reshape_func);
glutDisplayFunc(display);
glutKeyboardFunc(keyboard_func);
@@ -95,51 +97,6 @@ window::window(int argc, char *argv[])
glyphy_point_t top_left = { 0, 0 };
demo_buffer_move_to(buffer, &top_left);
demo_buffer_add_text(buffer, "waiting...", font, 1);
-
- while (m_pdir.m_procfiles.size() == 0) {
- sleep(1);
- m_pdir.scan();
- }
-
- // Now check if there's any new connections pending.
- demo_buffer_clear(buffer);
- ProcessFile *pfile = &m_pdir.m_procfiles[0];
- window::drawables.push_back(pfile);
-
- std::stringstream ss;
- ss << "program name:\t" << pfile->m_progname << std::endl;
- ss << "trnsltn units:\t" << pfile->m_tus.size() << std::endl;
- ss << "process id:\t" << pfile->m_pid << std::endl;
- ss << "parent pid:\t" << pfile->m_ppid << std::endl;
- ss << "process group:\t" << pfile->m_pgrp << std::endl;
-
- glyphy_point_t cur_pos = { 0, 0 };
- demo_buffer_move_to(buffer, &cur_pos);
-
- demo_buffer_add_text(buffer, ss.str().c_str(), font, 2);
-
- demo_buffer_current_point(buffer, &cur_pos);
- double y_margin = cur_pos.y;
-
- /*
- * T: total lines, known
- * W: number of 80 char columns
- * H: number of rows
- *
- * (1 ) W * 80 * H = T
- * (2 ) W * 80 = H
- * (2a) W = H / 80
- * (1a) (H / 80) * 80 * H = T
- * (1b) H^2 = T
- * (1c) H = sqrt(T)
- */
- // int rows_per_col = std::sqrt(lines_total) * 4;
-
- cur_pos.x = 0;
- glyphy_point_t tmp;
- for (auto &t : pfile->m_tus) {
- demo_buffer_add_text(buffer, t.comp_file_path, font, 1);
- }
}
void
@@ -193,19 +150,51 @@ current_time(void)
}
void
+window::add_new_process(std::string const &file_name)
+{
+ window::drawables.push_back(ProcessFile(file_name));
+ ProcessFile *pfile = &window::drawables.back();
+
+ demo_buffer_clear(buffer);
+
+ std::stringstream ss;
+ ss << "program name:\t" << pfile->m_progname << std::endl;
+ ss << "trnsltn units:\t" << pfile->m_tus.size() << std::endl;
+ ss << "process id:\t" << pfile->m_pid << std::endl;
+ ss << "parent pid:\t" << pfile->m_ppid << std::endl;
+ ss << "process group:\t" << pfile->m_pgrp << std::endl;
+
+ glyphy_point_t cur_pos = { 0, 0 };
+ demo_buffer_move_to(buffer, &cur_pos);
+
+ demo_buffer_add_text(buffer, ss.str().c_str(), font, 2);
+
+ demo_buffer_current_point(buffer, &cur_pos);
+
+ cur_pos.x = 0;
+ for (auto &t : pfile->m_tus) {
+ demo_buffer_add_text(buffer, t.comp_file_path.c_str(), font, 1);
+ }
+}
+
+void
window::next_frame(View *vu)
{
- // First update everything that's already known.
- for (auto &rp : window::drawables) {
+ std::vector<std::string> *new_files = m_pdir.scan();
+ for (std::string &file_name : *new_files)
+ add_new_process(file_name);
+
+ delete new_files;
- rp->read_executions();
+ for (auto &rp : window::drawables) {
+ rp.read_executions();
- glyphy_point_t tmp;
- for (auto &t : rp->m_tus) {
- size_t bytes_total = t.num_lines * sizeof(uint64_t);
+ //glyphy_point_t tmp;
+ for (auto &t : rp.m_tus) {
+ //size_t bytes_total = t.num_lines * sizeof(uint64_t);
for (int i = 0; i < t.num_lines; i++) {
- if (t.exec_diffs[i] == 0)
+ if (t.exec_counts[i] == 0)
continue;
// demo_buffer_add_text(buffer, ">>", font, 1);
diff --git a/src/process_dir.cc b/src/process_dir.cc
@@ -16,10 +16,13 @@ ProcessDir::ProcessDir()
err(1, "opendir");
}
-void
+std::vector<std::string> *
ProcessDir::scan()
{
- struct dirent *dp;
+ std::vector<std::string> *new_files;
+ struct dirent *dp;
+
+ new_files = new std::vector<std::string>();
rewinddir(m_dirp);
while ((dp = readdir(m_dirp)) != NULL) {
@@ -36,6 +39,8 @@ ProcessDir::scan()
continue;
m_known_files.insert(p);
- m_procfiles.push_back(ProcessFile(p));
+ new_files->push_back(p);
}
+
+ return new_files;
}
diff --git a/src/process_dir.h b/src/process_dir.h
@@ -1,5 +1,3 @@
-#include "process_file.h"
-
#include <sys/types.h>
#include <dirent.h> // DIR, opendir, readdir
@@ -9,12 +7,10 @@
class ProcessDir {
public:
ProcessDir();
- void scan();
-
- std::vector<ProcessFile> m_procfiles;
+ std::vector<std::string> *scan();
private:
- const char *m_procdir;
- DIR *m_dirp;
- std::unordered_set<std::string> m_known_files;
+ const char *m_procdir;
+ DIR *m_dirp;
+ std::unordered_set<std::string> m_known_files;
};