Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
a53ad129
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
大约 1 年 前同步成功
通知
456
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a53ad129
编写于
4月 29, 2021
作者:
T
teamol
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix time mould by ChinaSoft Team
Change-Id: I391eccfa8591feb95dcb5b74fba3788f63b981bf
上级
8592e04c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
162 addition
and
6 deletion
+162
-6
compat/posix/src/time.c
compat/posix/src/time.c
+114
-3
testsuites/unittest/time/clock/time_clock_test.cpp
testsuites/unittest/time/clock/time_clock_test.cpp
+24
-0
testsuites/unittest/time/timer/time_timer_test.cpp
testsuites/unittest/time/timer/time_timer_test.cpp
+24
-3
未找到文件。
compat/posix/src/time.c
浏览文件 @
a53ad129
...
...
@@ -50,6 +50,8 @@
#include "los_swtmr_pri.h"
#include "los_sys_pri.h"
#define CPUCLOCK_PERTHREAD_MASK 4
#define CPUCLOCK_ID_OFFSET 3
/*
* Do a time package defined return. This requires the error code
...
...
@@ -450,13 +452,85 @@ int clock_settime(clockid_t clockID, const struct timespec *tp)
return
settimeofday
(
&
tv
,
NULL
);
}
static
int
PthreadGetCputime
(
clockid_t
clockID
,
struct
timespec
*
ats
)
{
uint64_t
runtime
;
UINT32
intSave
;
UINT32
tid
=
((
UINT32
)
~
((
clockID
)
>>
CPUCLOCK_ID_OFFSET
));
if
(
OS_TID_CHECK_INVALID
(
tid
))
{
return
-
ESRCH
;
}
LosTaskCB
*
task
=
OsGetTaskCB
(
tid
);
if
(
OsCurrTaskGet
()
->
processID
!=
task
->
processID
)
{
return
-
EINVAL
;
}
#ifdef LOSCFG_KERNEL_CPUP
SCHEDULER_LOCK
(
intSave
);
runtime
=
task
->
taskCpup
.
allTime
;
SCHEDULER_UNLOCK
(
intSave
);
#endif
ats
->
tv_sec
=
runtime
/
OS_SYS_NS_PER_SECOND
;
ats
->
tv_nsec
=
runtime
%
OS_SYS_NS_PER_SECOND
;
return
0
;
}
static
int
ProcessGetCputime
(
clockid_t
clockID
,
struct
timespec
*
ats
)
{
UINT64
runtime
;
UINT32
intSave
;
const
pid_t
pid
=
((
pid_t
)
~
((
clockID
)
>>
CPUCLOCK_ID_OFFSET
));
LosProcessCB
*
spcb
=
NULL
;
if
(
OsProcessIDUserCheckInvalid
(
pid
)
||
pid
<
0
)
{
return
-
EINVAL
;
}
spcb
=
OS_PCB_FROM_PID
(
pid
);
if
(
OsProcessIsUnused
(
spcb
))
{
return
-
EINVAL
;
}
#ifdef LOSCFG_KERNEL_CPUP
SCHEDULER_LOCK
(
intSave
);
runtime
=
spcb
->
processCpup
.
allTime
;
SCHEDULER_UNLOCK
(
intSave
);
#endif
ats
->
tv_sec
=
runtime
/
OS_SYS_NS_PER_SECOND
;
ats
->
tv_nsec
=
runtime
%
OS_SYS_NS_PER_SECOND
;
return
0
;
}
static
int
GetCputime
(
clockid_t
clockID
,
struct
timespec
*
tp
)
{
int
ret
;
if
(
clockID
>=
0
)
{
return
-
EINVAL
;
}
if
((
UINT32
)
clockID
&
CPUCLOCK_PERTHREAD_MASK
)
{
ret
=
PthreadGetCputime
(
clockID
,
tp
);
}
else
{
ret
=
ProcessGetCputime
(
clockID
,
tp
);
}
return
ret
;
}
int
clock_gettime
(
clockid_t
clockID
,
struct
timespec
*
tp
)
{
UINT32
intSave
;
struct
timespec64
tmp
=
{
0
};
struct
timespec64
hwTime
=
{
0
};
if
(
(
clockID
>
MAX_CLOCKS
)
||
(
clockID
<
CLOCK_REALTIME
)
)
{
if
(
clockID
>
MAX_CLOCKS
)
{
goto
ERROUT
;
}
...
...
@@ -497,7 +571,10 @@ int clock_gettime(clockid_t clockID, struct timespec *tp)
case
CLOCK_TAI
:
TIME_RETURN
(
ENOTSUP
);
default:
goto
ERROUT
;
{
int
ret
=
GetCputime
(
clockID
,
tp
);
TIME_RETURN
(
-
ret
);
}
}
return
0
;
...
...
@@ -506,6 +583,37 @@ ERROUT:
TIME_RETURN
(
EINVAL
);
}
static
int
CheckClock
(
const
clockid_t
clockID
)
{
int
error
=
0
;
const
pid_t
pid
=
((
pid_t
)
~
((
clockID
)
>>
CPUCLOCK_ID_OFFSET
));
if
(
!
((
UINT32
)
clockID
&
CPUCLOCK_PERTHREAD_MASK
))
{
LosProcessCB
*
spcb
=
NULL
;
if
(
OsProcessIDUserCheckInvalid
(
pid
)
||
pid
<
0
)
{
return
-
EINVAL
;
}
spcb
=
OS_PCB_FROM_PID
(
pid
);
if
(
OsProcessIsUnused
(
spcb
))
{
error
=
-
EINVAL
;
}
}
else
{
error
=
-
EINVAL
;
}
return
error
;
}
static
int
CpuClockGetres
(
const
clockid_t
clockID
,
struct
timespec
*
tp
)
{
int
error
=
CheckClock
(
clockID
);
if
(
!
error
)
{
error
=
ProcessGetCputime
(
clockID
,
tp
);
}
return
error
;
}
int
clock_getres
(
clockid_t
clockID
,
struct
timespec
*
tp
)
{
if
(
tp
==
NULL
)
{
...
...
@@ -536,7 +644,10 @@ int clock_getres(clockid_t clockID, struct timespec *tp)
case
CLOCK_TAI
:
TIME_RETURN
(
ENOTSUP
);
default:
TIME_RETURN
(
EINVAL
);
{
int
ret
=
CpuClockGetres
(
clockID
,
tp
);
TIME_RETURN
(
-
ret
);
}
}
TIME_RETURN
(
0
);
...
...
testsuites/unittest/time/clock/time_clock_test.cpp
浏览文件 @
a53ad129
...
...
@@ -133,7 +133,9 @@ HWTEST_F(TimeClockTest, ClockTest009, TestSize.Level0)
{
ClockTest009
();
}
#endif
#if defined(LOSCFG_USER_TEST_FULL)
/* *
* @tc.name: ClockTest010
* @tc.desc: function for TimeClockTest
...
...
@@ -145,5 +147,27 @@ HWTEST_F(TimeClockTest, ClockTest010, TestSize.Level0)
ClockTest010
();
}
/* *
* @tc.name: ClockTest011
* @tc.desc: test pthread_getcpuclockid:get pthread time
* @tc.type: FUNC
* @tc.require: AR000E0QAB
*/
HWTEST_F
(
TimeClockTest
,
ClockTest011
,
TestSize
.
Level0
)
{
ClockTest011
();
}
/* *
* @tc.name: ClockTest012
* @tc.desc: test clock_getcpuclockid:get process time
* @tc.type: FUNC
* @tc.require: AR000E0QAB
*/
HWTEST_F
(
TimeClockTest
,
ClockTest012
,
TestSize
.
Level0
)
{
ClockTest012
();
}
#endif
}
// namespace OHOS
testsuites/unittest/time/timer/time_timer_test.cpp
浏览文件 @
a53ad129
...
...
@@ -82,10 +82,31 @@ HWTEST_F(TimeTimerTest, TimerTest003, TestSize.Level0)
* @tc.type: FUNC
* @tc.require: AR000EEMQ9
*/
/*
HWTEST_F(TimeTimerTest, TimerTest004, TestSize.Level0)
/*HWTEST_F(TimeTimerTest, TimerTest004, TestSize.Level0)
{
TimerTest004();
}
*/
TimerTest004();
// TODO: musl sigaction handler have only one param.
}*/
/* *
* @tc.name: TIME_TEST_TZSET_001
* @tc.desc: function for TIME_TEST_TZSET_001
* @tc.type: FUNC
* @tc.require: AR000EEMQ9
*/
HWTEST_F
(
TimeTimerTest
,
TIME_TEST_TZSET_001
,
TestSize
.
Level0
)
{
TIME_TEST_TZSET_001
();
}
/* *
* @tc.name: TIME_TEST_TZSET_002
* @tc.desc: function for TimeTimerTest
* @tc.type: FUNC
* @tc.require: AR000EEMQ9
*/
HWTEST_F
(
TimeTimerTest
,
TIME_TEST_TZSET_002
,
TestSize
.
Level0
)
{
TIME_TEST_TZSET_002
();
}
#endif
}
// namespace OHOS
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录