mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 10:37:45 +00:00
Introduce LibCore and move GElapsedTimer => CElapsedTimer.
I need a layer somewhere between AK (usable both by userspace and kernel) and LibGUI (usable by userspace except WindowServer.) So here's LibCore.
This commit is contained in:
parent
a74f3615ac
commit
5e0577a042
21 changed files with 98 additions and 37 deletions
3
LibCore/.gitignore
vendored
Normal file
3
LibCore/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
*.o
|
||||
*.d
|
||||
libcore.a
|
29
LibCore/CElapsedTimer.cpp
Normal file
29
LibCore/CElapsedTimer.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include <LibCore/CElapsedTimer.h>
|
||||
#include <AK/Assertions.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
void CElapsedTimer::start()
|
||||
{
|
||||
m_valid = true;
|
||||
gettimeofday(&m_start_time, nullptr);
|
||||
}
|
||||
|
||||
inline void timersub(const struct timeval* a, const struct timeval* b, struct timeval* result)
|
||||
{
|
||||
result->tv_sec = a->tv_sec - b->tv_sec;
|
||||
result->tv_usec = a->tv_usec - b->tv_usec;
|
||||
if (result->tv_usec < 0) {
|
||||
--result->tv_sec;
|
||||
result->tv_usec += 1000000;
|
||||
}
|
||||
}
|
||||
|
||||
int CElapsedTimer::elapsed() const
|
||||
{
|
||||
ASSERT(is_valid());
|
||||
struct timeval now;
|
||||
gettimeofday(&now, nullptr);
|
||||
struct timeval diff;
|
||||
timersub(&now, &m_start_time, &diff);
|
||||
return diff.tv_sec * 1000 + diff.tv_usec / 1000;
|
||||
}
|
16
LibCore/CElapsedTimer.h
Normal file
16
LibCore/CElapsedTimer.h
Normal file
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
#include <time.h>
|
||||
|
||||
class CElapsedTimer {
|
||||
public:
|
||||
CElapsedTimer() { }
|
||||
|
||||
bool is_valid() const { return m_valid; }
|
||||
void start();
|
||||
int elapsed() const;
|
||||
|
||||
private:
|
||||
bool m_valid { false };
|
||||
struct timeval m_start_time { 0, 0 };
|
||||
};
|
32
LibCore/Makefile
Normal file
32
LibCore/Makefile
Normal file
|
@ -0,0 +1,32 @@
|
|||
OBJS = \
|
||||
CElapsedTimer.o
|
||||
|
||||
LIBS =
|
||||
|
||||
LIBRARY = libcore.a
|
||||
STANDARD_FLAGS = -std=c++17 -Wno-sized-deallocation
|
||||
WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -Wimplicit-fallthrough
|
||||
FLAVOR_FLAGS = -fno-exceptions -fno-rtti
|
||||
OPTIMIZATION_FLAGS = -Os
|
||||
INCLUDE_FLAGS = -I../LibC -I../Servers -I.. -I.
|
||||
|
||||
DEFINES = -DSERENITY -DUSERLAND -DSANITIZE_PTRS -DLIBGUI
|
||||
|
||||
CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
|
||||
CXX = i686-pc-serenity-g++
|
||||
LD = i686-pc-serenity-ld
|
||||
AR = i686-pc-serenity-ar
|
||||
|
||||
all: $(LIBRARY)
|
||||
|
||||
$(LIBRARY): $(OBJS)
|
||||
@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
|
||||
|
||||
.cpp.o:
|
||||
@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
-include $(OBJS:%.o=%.d)
|
||||
|
||||
clean:
|
||||
@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue